Неформальное введение в 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. Числа
Интерпретатор действует как простой калькулятор: вы можете ввести выражение и он выведет значение. Синтаксис выражения прост: операторы +, -, * и / работают так же, как и в большинстве других языков (например, Pascal или C); круглые скобки (()) могут использоваться для группировки. Например:
>>> 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 также может обрабатывать строки, которые могут быть выражены несколькими способами. Они могут быть заключены в одинарные кавычки ('...') или двойные кавычки ("...") с тем же результатом 2. \ можно использовать для экранирования кавычек:
>>> 'spam eggs' # single quotes 'spam eggs' >>> '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.'
В интерактивном интерпретаторе выводная строка заключена в кавычки, а специальные символы экранируются обратными слешами. Хотя это иногда может выглядеть по-другому, чем вход (ограничивающие кавычки могут измениться), эти две строки эквивалентны. Строка заключена в двойные кавычки, если строка содержит одинарную кавычку и не содержит двойных кавычек, в противном случае она заключена в одинарные кавычки. Функция print() обеспечивает более читаемый вывод, опуская ограничивающие кавычки и печатая экранированные и специальные символы:
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
>>> print('"Isn\'t," they said.')
"Isn't," they said.
>>> s = 'First line.\nSecond line.' # \n means newline
>>> s # without print(), \n is included in the output
'First line.\nSecond line.'
>>> print(s) # with print(), \n produces a 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
-
Строки являются примерами последовательностей и поддерживают общие операции, поддерживаемые такими типами.
- Методы строк
-
Строки поддерживают большое количество методов для основных преобразований и поиска.
- Форматированные строковые литералы
-
Строковые литералы, которые имеют встроеные выражения.
- Синтаксис форматирования строк
-
Информация о форматировании строк с помощью
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[:] [1, 4, 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]
Вы также можете добавить новые элементы в конец списка, используя 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]
Присвоение срезам также возможно, и это может даже изменить размер списка или полностью очистить его:
>>> 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,
Примечания
-
1 -
Поскольку
**имеет более высокий приоритет, чем-,-3**2будет интерпретироваться как-(3**2)и, следовательно, приведёт к-9. Чтобы избежать этого и получить9, можно использовать(-3)**2. -
2 -
В отличие от других языков, специальные символы, такие как
\n, имеют одинаковый смысл как с одинарными ('...') кавычками, так и с двойными ("...") кавычками. Единственное различие между ними заключается в том, что внутри одинарных кавычек вам не нужно экранировать"(но вам нужно экранировать\') и наоборот.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/tutorial/introduction.html