Неформальное введение в 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.12/tutorial/introduction.html