Неформальное введение в 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
Есть один тонкий момент относительно сырых строк: сырая строка не может заканчиваться нечетным числом \ символов; см. запись в FAQ для получения дополнительной информации и решений.
Строковые литералы могут занимать несколько строк. Один из способов — использовать тройные кавычки: """...""" или '''...'''. Конец строк автоматически включается в строку, но это можно предотвратить, добавив \ в конце строки. Следующий пример:
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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/tutorial/introduction.html