Spec-Zone.ru › Python 3.11

Неформальное введение в 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,
    

Сноски

[1]

Поскольку приоритет ** выше приоритета -, выражение -3**2 будет интерпретировано как -(3**2), и в результате получится -9. Чтобы избежать этого и получить 9, можно использовать (-3)**2.

[2]

В отличие от других языков, специальные символы, например \n, имеют одинаковое значение в одинарных ('...') и двойных ("...") кавычках. Единственное различие между ними состоит в том, что внутри одинарных кавычек не нужно экранировать " (но нужно экранировать \'), и наоборот.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/tutorial/introduction.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API