Неофициальное введение в Python
В следующих примерах ввод и вывод различаются по наличию или отсутствию приглашений ко вводу (>>> и …): чтобы повторить пример, необходимо вводить всё после приглашения, когда оно появляется; строки, не начинающиеся с приглашения, являются выводом интерпретатора. Обратите внимание: отдельное приглашение ко вводу на строке примера означает, что нужно ввести пустую строку; так завершается многострочная команда.
Вы можете использовать кнопку «Копировать» (она появляется в верхнем правом углу при наведении на пример кода или касании его), которая удаляет приглашения и пропускает вывод, чтобы скопировать строки ввода и вставить их в интерпретатор.
Во многих примерах этого руководства, даже тех, которые вводятся в интерактивном режиме, есть комментарии. Комментарии в Python начинаются с символа решётки, #, и продолжаются до конца физической строки. Комментарий может находиться в начале строки или после пробела либо кода, но не внутри строкового литерала. Символ решётки внутри строкового литерала — это просто символ решётки. Поскольку комментарии служат для пояснения кода и не интерпретируются Python, при вводе примеров их можно опустить.
Несколько примеров:
# this is the first comment
spam = 1 # and this is the second comment
# ... and now a third!
text = "# This is not a comment because it's inside quotes."
3.1. Использование Python в качестве калькулятора
Попробуем несколько простых команд Python. Запустите интерпретатор и дождитесь основного приглашения ко вводу, >>>. (Это не должно занять много времени.)
3.1.1. Числа
Интерпретатор работает как простой калькулятор: в него можно ввести выражение, и он выведет его значение. Синтаксис выражений прост: операторы +, -, * и / можно использовать для выполнения арифметических операций; скобки (()) можно использовать для группировки. Например:
>>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5*6) / 4 5.0 >>> 8 / 5 # division always returns a floating-point number 1.6
Целые числа (например, 2, 4, 20) имеют тип int, а числа с дробной частью (например, 5.0, 1.6) имеют тип float. О числовых типах мы подробнее поговорим позже в этом руководстве.
Деление (/) всегда возвращает число с плавающей точкой. Для выполнения деления с округлением вниз и получения целочисленного результата можно использовать оператор //; для вычисления остатка можно использовать %:
>>> 17 / 3 # classic division returns a float 5.666666666666667 >>> >>> 17 // 3 # floor division discards the fractional part 5 >>> 17 % 3 # the % operator returns the remainder of the division 2 >>> 5 * 3 + 2 # floored quotient * divisor + remainder 17
В Python для возведения в степень можно использовать оператор ** [1]:
>>> 5 ** 2 # 5 squared 25 >>> 2 ** 7 # 2 to the power of 7 128
Знак равенства (=) используется для присваивания значения переменной. После этого до следующего интерактивного приглашения результат не отображается:
>>> width = 20 >>> height = 5 * 9 >>> width * height 900
Если переменная не «определена» (ей не присвоено значение), попытка её использовать приведёт к ошибке:
>>> n # try to access an undefined variable Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'n' is not defined
Поддержка чисел с плавающей точкой реализована в полном объёме; операторы с операндами разных типов преобразуют целочисленный операнд в число с плавающей точкой:
>>> 4 * 3.75 - 1 14.0
В интерактивном режиме последнее выведенное выражение присваивается переменной _. Это означает, что при использовании Python в качестве настольного калькулятора вычисления можно продолжать несколько проще, например:
>>> tax = 12.5 / 100 >>> price = 100.50 >>> price * tax 12.5625 >>> price + _ 113.0625 >>> round(_, 2) 113.06
Пользователю следует считать эту переменную доступной только для чтения. Не присваивайте ей значение явно — так вы создадите независимую локальную переменную с тем же именем, которая скроет встроенную переменную с её особым поведением.
Помимо int и float, Python поддерживает и другие числовые типы, например Decimal и Fraction. В Python также есть встроенная поддержка комплексных чисел; для обозначения мнимой части используется суффикс j или J (например, 3+5j).
3.1.2. Текст
Python умеет работать с текстом (представленным типом str, так называемыми «строками»), а также с числами. Текст может содержать символы «!», слова «rabbit», имена «Paris», предложения «Got your back.» и т. д. «Yay! :)». Строки можно заключать в одинарные кавычки ('...') или двойные кавычки ("..."), результат будет одинаковым [2].
>>> 'spam eggs' # single quotes 'spam eggs' >>> "Paris rabbit got your back :)! Yay!" # double quotes 'Paris rabbit got your back :)! Yay!' >>> '1975' # digits and numerals enclosed in quotes are also strings '1975'
Чтобы включить кавычку в строку, её нужно «экранировать», поставив перед ней \. В качестве альтернативы можно использовать кавычки другого типа:
>>> 'doesn\'t' # use \' to escape the single quote... "doesn't" >>> "doesn't" # ...or use double quotes instead "doesn't" >>> '"Yes," they said.' '"Yes," they said.' >>> "\"Yes,\" they said." '"Yes," they said.' >>> '"Isn\'t," they said.' '"Isn\'t," they said.'
В оболочке Python определение строки и её вывод могут выглядеть по-разному. Функция print() выводит текст в более удобном для чтения виде: опускает обрамляющие кавычки и отображает экранированные и специальные символы:
>>> s = 'First line.\nSecond line.' # \n means newline >>> s # without print(), special characters are included in the string 'First line.\nSecond line.' >>> print(s) # with print(), special characters are interpreted, so \n produces new line First line. Second line.
Если вы не хотите, чтобы символы, перед которыми стоит \, интерпретировались как специальные, можно использовать необработанные строки, добавив r перед первой кавычкой:
>>> print('C:\this\name') # here \t means tab, \n means newline
C: his
ame
>>> print(r'C:\this\name') # note the r before the quote
C:\this\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 times 'un', followed by 'ium' >>> 3 * 'un' + 'ium' 'unununium'
Два или более строковых литерала (то есть заключённых в кавычки) автоматически объединяются, если они расположены рядом.
>>> 'Py' 'thon' 'Python'
Эта возможность особенно полезна, когда нужно разбить длинные строки:
>>> text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'
Однако это работает только с двумя литералами, но не с переменными или выражениями:
>>> prefix = 'Py'
>>> prefix 'thon' # can't concatenate a variable and a string literal
File "<stdin>", line 1
prefix 'thon'
^^^^^^
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
File "<stdin>", line 1
('un' * 3) 'ium'
^^^^^
SyntaxError: invalid syntax
Чтобы объединить переменные или переменную с литералом, используйте +:
>>> prefix + 'thon' 'Python'
Строки можно индексировать (обращаться к элементам по индексу); индекс первого символа равен 0. Отдельного типа для символов нет: символ — это просто строка длиной один:
>>> word = 'Python' >>> word[0] # character in position 0 'P' >>> word[5] # character in position 5 'n'
Индексы также могут быть отрицательными; в этом случае отсчёт ведётся справа:
>>> word[-1] # last character 'n' >>> word[-2] # second-last character 'o' >>> word[-6] 'P'
Обратите внимание: поскольку -0 равен 0, отрицательные индексы начинаются с -1.
Помимо индексации поддерживается также срез. Индексация позволяет получить отдельные символы, а с помощью среза можно получить подстроку:
>>> word[0:2] # characters from position 0 (included) to 2 (excluded) 'Py' >>> word[2:5] # characters from position 2 (included) to 5 (excluded) 'tho'
Для индексов среза предусмотрены удобные значения по умолчанию: если первый индекс не указан, он считается равным нулю; если не указан второй, он считается равным длине строки, для которой берётся срез.
>>> word[:2] # character from the beginning to position 2 (excluded) 'Py' >>> word[4:] # characters from position 4 (included) to the end 'on' >>> word[-2:] # characters from the second-last (included) to the end 'on'
Обратите внимание: начальный индекс всегда включается, а конечный — всегда исключается. Благодаря этому s[:i] + s[i:] всегда равно s:
>>> word[:2] + word[2:] 'Python' >>> word[:4] + word[4:] 'Python'
Чтобы запомнить, как работают срезы, можно представить, что индексы указывают на промежутки между символами, причём левый край первого символа имеет номер 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] # the word only has 6 characters Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range
Однако при взятии среза индексы за пределами допустимого диапазона обрабатываются без ошибок:
>>> word[4:42] 'on' >>> word[42:] ''
Строки Python нельзя изменять — они неизменяемы. Поэтому попытка присвоить значение элементу строки по индексу приведёт к ошибке:
>>> word[0] = 'J' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment >>> word[2:] = 'py' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
Если вам нужна другая строка, создайте новую:
>>> 'J' + word[1:] 'Jython' >>> word[:2] + 'py' 'Pypy'
Встроенная функция len() возвращает длину строки:
>>> s = 'supercalifragilisticexpialidocious' >>> len(s) 34
См. также
- Тип текстовой последовательности — str
-
Строки — пример последовательностей; они поддерживают общие операции, доступные для таких типов.
- Методы строк
-
Строки поддерживают множество методов для базовых преобразований и поиска.
- f-строки
-
Строковые литералы со встроенными выражениями.
- Синтаксис форматирования строк
-
Информация о форматировании строк с помощью
str.format(). - Форматирование строк в стиле printf
-
Старые операции форматирования, вызываемые, когда строки являются левым операндом оператора
%, подробнее описаны здесь.
3.1.3. Списки
В Python есть несколько составных типов данных, предназначенных для группировки других значений. Самый универсальный из них — список; его можно записать как список значений (элементов), разделённых запятыми и заключённых в квадратные скобки. Списки могут содержать элементы разных типов, но обычно все элементы имеют один и тот же тип.
>>> squares = [1, 4, 9, 16, 25] >>> squares [1, 4, 9, 16, 25]
Как и строки (и все остальные встроенные типы последовательностей), списки можно индексировать и брать срезы:
>>> squares[0] # indexing returns the item 1 >>> squares[-1] 25 >>> squares[-3:] # slicing returns a new list [9, 16, 25]
Списки также поддерживают такие операции, как объединение:
>>> squares + [36, 49, 64, 81, 100] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
В отличие от строк, которые неизменяемы, списки относятся к изменяемому типу, то есть их содержимое можно изменять:
>>> cubes = [1, 8, 27, 65, 125] # something's wrong here >>> 4 ** 3 # the cube of 4 is 64, not 65! 64 >>> cubes[3] = 64 # replace the wrong value >>> cubes [1, 8, 27, 64, 125]
Новые элементы также можно добавлять в конец списка с помощью метода list.append() (подробнее о методах мы поговорим позже):
>>> cubes.append(216) # add the cube of 6 >>> cubes.append(7 ** 3) # and the cube of 7 >>> cubes [1, 8, 27, 64, 125, 216, 343]
Простое присваивание в Python никогда не копирует данные. При присваивании списка переменной эта переменная ссылается на существующий список. Любые изменения списка через одну переменную будут видны через все остальные переменные, которые на него ссылаются:
>>> rgb = ["Red", "Green", "Blue"]
>>> rgba = rgb
>>> id(rgb) == id(rgba) # they reference the same object
True
>>> rgba.append("Alph")
>>> rgb
["Red", "Green", "Blue", "Alph"]
Все операции взятия среза возвращают новый список с запрошенными элементами. Это означает, что следующий срез возвращает поверхностную копию списка:
>>> correct_rgba = rgba[:] >>> correct_rgba[-1] = "Alpha" >>> correct_rgba ["Red", "Green", "Blue", "Alpha"] >>> rgba ["Red", "Green", "Blue", "Alph"]
Присваивать значения срезам тоже можно; это даже позволяет изменить размер списка или полностью очистить его:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> letters ['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> # replace some values >>> letters[2:5] = ['C', 'D', 'E'] >>> letters ['a', 'b', 'C', 'D', 'E', 'f', 'g'] >>> # now remove them >>> letters[2:5] = [] >>> letters ['a', 'b', 'f', 'g'] >>> # clear the list by replacing all the elements with an empty list >>> 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 можно использовать для решения более сложных задач, чем сложение двух и двух. Например, начальную подпоследовательность ряда Фибоначчи можно записать так:
>>> # Fibonacci series: >>> # the sum of two elements defines the next >>> a, b = 0, 1 >>> while a < 10: ... print(a) ... a, b = b, a+b ... 0 1 1 2 3 5 8
В этом примере появились несколько новых возможностей.
- Первая строка содержит множественное присваивание: переменные
aиbодновременно получают новые значения 0 и 1. В последней строке это используется снова: выражения в правой части сначала вычисляются все вместе, и только затем выполняются присваивания. Выражения в правой части вычисляются слева направо. - Цикл
whileвыполняется, пока условие (в данном случаеa < 10) остаётся истинным. В Python, как и в C, любое ненулевое целое значение считается истинным; ноль — ложным. Условием также может быть строка или список, фактически любая последовательность: последовательность ненулевой длины считается истинной, пустая — ложной. В примере используется простое сравнение. Стандартные операторы сравнения записываются так же, как в C:<(меньше),>(больше),==(равно),<=(меньше или равно),>=(больше или равно) и!=(не равно). - Тело цикла имеет отступ: в Python отступы используются для группировки инструкций. В интерактивном приглашении перед каждой строкой с отступом нужно ввести табуляцию или пробелы. На практике более сложный код для Python обычно набирают в текстовом редакторе; во всех приличных текстовых редакторах есть функция автоматической расстановки отступов. После ввода составной инструкции в интерактивном режиме нужно ввести пустую строку, чтобы обозначить её завершение (поскольку парсер не может догадаться, когда вы ввели последнюю строку). Обратите внимание: все строки внутри базового блока должны иметь одинаковый отступ.
-
Функция
print()выводит значения переданных ей аргументов. Она отличается от простого ввода выражения, которое нужно вывести (как мы делали ранее в примерах с калькулятором), тем, как обрабатывает несколько аргументов, числа с плавающей точкой и строки. Строки выводятся без кавычек, а между элементами вставляется пробел, поэтому вывод можно удобно форматировать, например так:>>> i = 256*256 >>> print('The value of i is', i) The value of i is 65536Именованный аргумент end можно использовать, чтобы убрать перевод строки после вывода или завершить вывод другой строкой:
>>> a, b = 0, 1 >>> while a < 1000: ... print(a, end=',') ... a, b = b, a+b ... 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
Сноски
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/tutorial/introduction.html