|
|||||||
3. Неформальное введение в Python
Время создания: 29.07.2019 23:51
Раздел: Разные закладки - Python - Перевод документации Python 3.x - 1. Документация
Запись: xintrea/mytetra_db_adgaver_new/master/base/1515942421hloqol9ymy/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
3. Неформальное введение в Python
В следующих примерах ввод и вывод различаются присутствием или отсутствием приглашений (>>> (docs.python.org/3/glossary.html#term) и ... (docs.python.org/3/glossary.html#term-1)): чтобы повторить пример, вы должны ввести все после приглашения, когда оно появляется; строки, которые не начинаются с приглашения, являются выводом интерпретатора. Заметьте, что вторичное приглашение на отдельной строке в примере означает, что вы должны ввести пустую строку; это используется для окончания многострочной команды. Многие из примеров в данном руководстве, даже те, которые вводятся в интерактивном режиме, включают комментарии. Комментарии в Python начинаются с хэш-символа # и продолжаются до конца физической строки. Комментарий может появиться в начале строки или после пробела или кода, но не внутри строкового литерала. Хэш-символ внутри строки - это просто хэш-символ. Так как комментарии являются пояснением кода и не интерпретируются Python, они могут быть опущены при работе с примерами. Несколько примеров: # это первый комментарий spam = 1 # а это второй комментарий # ... и теперь третий! text = "# Это не комментарий, т. к. это находится внутри кавычек." 3.1. Использование Python в качестве калькулятора Испытаем несколько простых команд Python. Запустите интерпретатор и дождитесь первичного приглашения >>>. (Это не должно занять много времени.) Интерпретатор действует как простой калькулятор: вы можете ввести в него выражение, и он выведет результат. Синтаксис выражения простой: операторы +, -, * и / работают также как в большинстве других языках (например, Pascal или C); круглые скобки могут быть использованы для группировки. Например: >>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5 # деление всегда возвращает число с плавающей точкой 1.6 Целые числа (например, 2, 4, 20) имеют тип int , другие с дробной частью (например, 5.0, 1.6) имеют тип float . Далее в учебнике мы подробнее познакомимся с числовыми типами. Деление (/) всегда возвращает вещественное число. Чтобы выполнить floor division (docs.python.org/3/glossary.html#term-floor-division) и получить целый результат (отбрасыванием какой-либо дробной части), вы можете использовать оператор //; для вычисления остатка можете использовать %: >>> 17 / 3 # классическое деление возвращает вещественное число 5.666666666666667 >>> >>> 17 // 3 # деление нацело отбрасывает дробную часть 5 >>> 17 % 3 # оператор % возвращает остаток от деления 2 >>> 5 * 3 + 2 # результат * делитель + остаток 17 В Python возможно использовать оператор ** для вычисления степени [ 1]: >>> 5 ** 2 # 5 в квадрате 25 >>> 2 ** 7 # 2 в степени 7 128 Знак равенства (=) используется для присваивания значения переменной. При этом никакого результата не отображается перед следующим интерактивным приглашением: >>> width = 20 >>> height = 5 * 9 >>> width * height 900 Если переменная не "определена" (не присвоено значение), попытка использовать ее выдаст вам ошибку: >>> n # попытка доступа к неопределенной переменной Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'n' is not defined Есть полная поддержка для чисел с плавающей точкой; операторы со смешанными типами операндов конвертируют целый операнд в число с плавающей точкой: >>> 3 * 3.75 / 1.5 7.5 >>> 7.0 / 2 3.5 В интерактивном режиме последнее выведенное выражение присваивается переменной _. Это означает, что когда вы используете Python как настольный калькулятор, то в какой-то степени легче продолжать вычисления, например: >>> tax = 12.5 / 100 >>> price = 100.50 >>> price * tax 12.5625 >>> price + _ 113.0625 >>> round(_, 2) 113.06 Эту переменную следует рассматривать только как предназначенную для чтения пользователем. Не присваивайте ей значение явно - вы создадите независимую локальную переменную с таким же именем, маскирующую встроенную переменную с ее волшебным поведением. В дополнение к int и float Python поддерживает другие типы чисел, такие как Decimal (docs.python.org/3/library/decimal.html#decimal.Decimal) и Fraction (docs.python.org/3/library/fractions.html#fractions.Fraction). Python также имеет встроенную поддержку для комплексных чисел и использует суффикс j или J для обозначения мнимой части (например, 3+5j). Кроме чисел Python также может манипулировать строками, которые могут быть описаны несколькими способами. Они могут быть заключены в одинарные кавычки ('...') или двойные кавычки ("...") с одинаковым результатом [ 2]. \ может быть использован для экранирования кавычек: >>> 'spam eggs' # одинарные кавычки 'spam eggs' >>> 'doesn\'t' # используйте \' для экранирования одиночной кавычки... "doesn't" >>> "doesn't" # ...или вместо этого используйте двойные кавычки "doesn't" >>> '"Yes," he said.' '"Yes," he said.' >>> "\"Yes,\" he said." '"Yes," he said.' >>> '"Isn\'t," she said.' '"Isn\'t," she said.' В интерактивном интерпретаторе выводящаяся строка заключена в кавычки и специальные символы экранируются бэкслешами. В то же время это может иногда отличаться от ввода (заключающие кавычки могли измениться), две строки эквивалентны. Строка заключена в двойные кавычки, если она включает одинарные, при этом двойные кавычки отсутствуют, иначе она заключена в одинарные кавычки. Функция print() создает более читабельный вывод, опуская ограждающие кавычки и интерпретируя экранируемые и специальные символы: >>> '"Isn\'t," she said.' '"Isn\'t," she said.' >>> print('"Isn\'t," she said.') "Isn't," she said. >>> s = 'First line.\nSecond line.' # \n означает новую строку >>> s # без print(), \n содержится в выводе 'First line.\nSecond line.' >>> print(s) # с print(), \n создает новую строку First line. Second line. Если вы не хотите, чтобы символы, которым предшествует \, интерпретировались как специальные, то можете использовать raw string (сырые строки - прим. перев.), добавив r перед первой кавычкой: >>> print('C:\some\name') # здесь \n означает новую строку! C:\some ame >>> print(r'C:\some\name') # обратите внимание на r перед кавычкой C:\some\name Строковые литералы могут охватывать множество строк. Один способ - это использование тройных кавычек: """...""" или '''...'''. Конец строки по-умолчанию обозначает переход на новою, но есть возможность предотвратить это, добавив \ в конец строки. Следующий пример: print("""\ Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to """) дает следующий вывод (заметьте, что начальная новая строка не включена): Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to Строки могут быть соединены (склеены вместе) оператором + и повторены с помощью *: >>> # 3 раза 'un' с последующим 'ium' >>> 3 * 'un' + 'ium' 'unununium' Два или более строковых литерала (т. е. когда каждый заключен в кавычки), следующих друг за другом, автоматически конкатенируются. >>> 'Py' 'thon' 'Python' Однако это работает только с двумя литералами, но не с переменными или выражениями: >>> prefix = 'Py' >>> prefix 'thon' # не может соединить переменную и строковый литерал ... SyntaxError: invalid syntax >>> ('un' * 3) 'ium' ... SyntaxError: invalid syntax Если вы хотите конкатенировать переменные или переменную и литерал, используйте +: >>> prefix + 'thon' 'Python' Это свойство особенно полезно, когда вы хотите разорвать длинную строку: >>> text = ('Put several strings within parentheses ' 'to have them joined together.') >>> text 'Put several strings within parentheses to have them joined together.' Строка может быть проиндексирована, первый символ имеет индекс 0. Отдельный символьный тип отсутствует, символ - это просто строка единичной размерностью: >>> word = 'Python' >>> word[0] # символ в позиции 0 'P' >>> word[5] # символ в позиции 5 'n' Индексы также могут быть отрицательными числами для начала отсчета справа: >>> word[-1] # последний символ 'n' >>> word[-2] # второй с конца символ 'o' >>> word[-6] 'P' Заметьте, что поскольку -0 - это тоже самое, что 0, то отрицательные индексы начинаются с -1. В дополнение к индексации также поддерживаются срезы. В то время как индексация используется, чтобы получать отдельные символы, срезы позволяют вам получать подстроки: >>> word[0:2] # символы от позиции 0 (включая) до 2 (исключая) 'Py' >>> word[2:5] # символы от позиции 2 (включая) до 5 (исключая) 'tho' Заметьте, что начало всегда включается, а конец всегда исключается. Это обеспечивает то, что s[:i] + s[i:] всегда равно s: >>> word[:2] + word[2:] 'Python' >>> word[:4] + word[4:] 'Python' Индексация срезов имеет полезные свойства по умолчанию; опущенный первый индекс по умолчанию обозначает ноль, опущенный второй индекс по умолчанию обозначает размер строки, с которой берется срез. >>> word[:2] # символ от начала до позиции 2 (исключая) 'Py' >>> word[4:] # символ от позиции 4 (включая) до конца 'on' >>> word[-2:] # символы от второго с конца (включая) до конца 'on' Один из способов запомнить, как работают срезы, - это думать об индексах как указывающих между символами, левый край первого символа нумеруется 0. Тогда как правый край последнего символа строки из n символов имеет индекс n, например: +---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1 Первый ряд чисел дает позицию индексов 0...6 в строке; второй ряд дает соответствующие отрицательные индексы. Срез от i до j состоит из всех символов между краями, отмеченными i и j соответственно. Для неотрицательных индексов длина среза представляет собой разность индексов, если оба находятся в границах. Например, длина word[1:3] равна 2. Попытка использовать индекс, который является слишком большим, приведет к ошибке: >>> word[42] # у word только 6 символов Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range Однако индексы вне диапазона обрабатываются корректно при использовании для взятия среза: >>> word[4:42] 'on' >>> word[42:] '' Строки Python не могут быть изменены - они неизменяемы (docs.python.org/3/glossary.html#term-immutable). Поэтому присвоение по индексированной позиции в строке приводит к ошибке: >>> word[0] = 'J' ... TypeError: 'str' object does not support item assignment >>> word[2:] = 'py' ... TypeError: 'str' object does not support item assignment Если вам нужна другая строка, следует создать новую строку: >>> 'J' + word[1:] 'Jython' >>> word[:2] + 'py' 'Pypy' Встроенная функция len() возвращает длину строки: >>> s = 'supercalifragilisticexpialidocious' >>> len(s) 34 Смотрите также:
Python'у известно определенное количество сложных типов данных, используемых для группировки разных значений. Наиболее гибким является list (список - прим. пер.), который может быть описан как список разделенных запятой значений (элементов) между квадратными скобками. Списки могут включать элементы различных типов, но обычно все элементы имеют одинаковый тип. >>> squares = [1, 4, 9, 16, 25] >>> squares [1, 4, 9, 16, 25] Как строки (и все другие встроенные типы последовательностей (docs.python.org/3/glossary.html#term-sequence)), списки могут быть проиндексированы и из них можно брать срезы: >>> squares[0] # индекс возвращает элемент 1 >>> squares[-1] 25 >>> squares[-3:] # срез возвращает новый список [9, 16, 25] Все операции взятия среза возвращают новый список, содержащий запрошенные элементы. Это значит, что ниже следующий срез возвращает новую (поверхностную) копию списка: >>> squares[:] [1, 4, 9, 16, 25] Списки также поддерживают такую операцию как конкатенацию: >>> squares + [36, 49, 64, 81, 100] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] В отличие от строк, которые неизменяемые (docs.python.org/3/glossary.html#term-immutable), списки являются изменяемым (docs.python.org/3/glossary.html#term-mutable) типом, т. е. есть возможность изменить их содержание: >>> cubes = [1, 8, 27, 65, 125] # что-то здесь не так >>> 4 ** 3 # 4 в кубе равно 64, а не 65! 64 >>> cubes[3] = 64 # замена ошибочного значения >>> cubes [1, 8, 27, 64, 125] Вы также можете добавить новый элемент в конец списка, используя метод append() (мы узнаем о методах больше позже): >>> cubes.append(216) # добавление куба 6-ти >>> cubes.append(7 ** 3) # и куба 7-ми >>> cubes [1, 8, 27, 64, 125, 216, 343] Присвоение срезов также возможно, и этим можно даже изменить размер списка или полностью его очистить: >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> letters ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> # замена нескольких значений >>> letters[2:5] = ['C', 'D', 'E'] >>> letters ['a', 'b', 'C', 'D', 'E', 'f', 'g'] >>> # теперь удалим их >>> letters[2:5] = [] >>> letters ['a', 'b', 'f', 'g'] >>> # очистим список, заменив все элементы на пустой список >>> letters[:] = [] >>> letters [] Встроенная функция len() также применима к спискам: >>> letters = ['a', 'b', 'c', 'd'] >>> len(letters) 4 Возможно вкладывать списки (создавать списки, включающие другие списки), например: >>> a = ['a', 'b', 'c'] >>> n = [1, 2, 3] >>> x = [a, n] >>> x [['a', 'b', 'c'], [1, 2, 3]] >>> x[0] ['a', 'b', 'c'] >>> x[0][1] 'b' 3.2. Первые шаги к программированию Конечно мы можем использовать Python для более сложных задач, чем складывать вместе два и два. Например, мы можем написать начальную часть последовательности ряда Фибоначчи вот так: >>> # ряд Фибоначчи: ... # сумма двух элементов определяет следующий ... a, b = 0, 1 >>> while b < 10: ... print(b) ... a, b = b, a+b ... 1 1 2 3 5 8 Этот пример знакомит с несколькими новыми свойствами.
>>> i = 256*256 >>> print('The value of i is', i) The value of i is 65536 Аргумент ключевое слово end может быть использовано для отмены новой строки после вывода, или окончания вывода другой строкой: >>> a, b = 0, 1 >>> while b < 1000: ... print(b, end=',') ... a, b = b, a+b ... 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987, Примечания [ 1] Поскольку ** имеет более высокий приоритет, чем -, то -3**2 будет интерпретировано как -(3**2) и поэтому даст результат -9. Чтобы избежать этого и получить 9, вы можете использовать (-3)**2. [ 2] В отличие от других языков специальные символы, такие как \n, имеют одинаковое значение как в одинарных ('...'), так и двойных ("...") кавычках. Разница между двумя вариантами только в том, что в одинарных кавычках вам не надо экранировать " (но вы должны экранировать \') и наоборот. Создано 2015-08-07 Обновлено 2017-05-04 |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|