Spec-Zone.ru › Python 3.13

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

Spec-Zone.ru

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