Неформальное введение в 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
Существует один тонкий аспект сырых строк: сырая строка не может заканчиваться нечетным числом символов \; см. статью в 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
-
Строки являются примерами последовательностей и поддерживают общие операции, поддерживаемые такими типами.
- Методы строк
-
Строки поддерживают большое количество методов для основных преобразований и поиска.
- 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[:] [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]
Вы также можете добавлять новые элементы в конец списка, используя 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]
Присваивание срезам также возможно, и это может даже изменить размер списка или полностью его очистить:
>>> 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.11/tutorial/introduction.html