Неформальное введение в 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:\some\name') # here \n means newline!
C:\some
ame
>>> print(r'C:\some\name') # note the r before the quote
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 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/tutorial/introduction.html