Spec-Zone.ru › Python 3.8

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

Обратите внимание, как начало всегда включается, а конец всегда исключается. Это гарантирует, что s[:i] + s[i:] всегда равно s;

>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'

Индексы среза имеют полезные значения по умолчанию; пропущенный первый индекс по умолчанию равен нулю, пропущенный второй индекс по умолчанию равен размеру срезанной строки.

>>> 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'

Один из способов запомнить, как работают срезы, — представить индексы как указывающие между символами, причём левая граница первого символа имеет номер 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.8/tutorial/introduction.html

Spec-Zone.ru

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