Документация Python неофициальный перевод

introduction.md

526 строк · 30.7 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/tutorial/introduction.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Неформальное введение в Python89В следующих примерах ввод и вывод различаются наличием или отсутствием приглашений ([\>\>\>](https://python-all.ru/3.13/glossary.html#term-0) и [](https://python-all.ru/3.13/glossary.html#term-...)): чтобы повторить пример, необходимо ввести всё после приглашения, когда оно появляется; строки, не начинающиеся с приглашения, являются выводом интерпретатора. Обратите внимание, что вторичное приглашение на отдельной строке в примере означает, что нужно ввести пустую строку; это используется для завершения многострочной команды.1011Можно использовать кнопку «Копировать» (она появляется в правом верхнем углу при наведении или нажатии на пример кода), которая удаляет приглашения и пропускает вывод, для копирования и вставки строк ввода в интерпретатор.1213Многие примеры в этом руководстве, даже те, которые вводятся в интерактивном приглашении, содержат комментарии. Комментарии в Python начинаются с символа решётки, `#`, и продолжаются до конца физической строки. Комментарий может находиться в начале строки, после пробелов или кода, но не внутри строкового литерала. Символ решётки внутри строкового литерала – это просто символ решётки. Поскольку комментарии служат для пояснения кода и не интерпретируются Python, их можно опускать при вводе примеров.1415Несколько примеров:1617```python18# это первый комментарий19spam = 1  # а это второй комментарий20          # ... и теперь третий!21text = "# This is not a comment because it's inside quotes."22```2324## 3.1. Использование Python в качестве калькулятора2526Давайте попробуем несколько простых команд Python. Запустите интерпретатор и дождитесь основного приглашения, `>>>`. (Это не должно занять много времени.)2728### 3.1.1. Числа2930Интерпретатор работает как простой калькулятор: можно ввести выражение, и он выведет значение. Синтаксис выражений интуитивно понятен: операторы `+`, `-`, `*` и `/` используются для выполнения арифметических операций; круглые скобки (`()`) можно использовать для группировки. Например:3132```python33>>> 2 + 234435>>> 50 - 5*6362037>>> (50 - 5*6) / 4385.039>>> 8 / 5  # деление всегда возвращает число с плавающей запятой401.641```4243Целые числа (например, `2`, `4`, `20`) имеют тип [`int`](https://python-all.ru/3.13/library/functions.html#int), числа с дробной частью (например, `5.0`, `1.6`) – тип [`float`](https://python-all.ru/3.13/library/functions.html#float). Мы узнаем больше о числовых типах позже в этом руководстве.4445Деление (`/`) всегда возвращает число с плавающей запятой. Чтобы выполнить [целочисленное деление](https://python-all.ru/3.13/glossary.html#term-floor-division) и получить целый результат, можно использовать оператор `//`; для вычисления остатка используется `%`:4647```python48>>> 17 / 3  # классическое деление возвращает число с плавающей запятой495.66666666666666750>>>51>>> 17 // 3  # целочисленное деление отбрасывает дробную часть52553>>> 17 % 3  # оператор % возвращает остаток от деления54255>>> 5 * 3 + 2  # частное, округлённое вниз, * делитель + остаток561757```5859В Python можно использовать оператор `**` для возведения в степень [\[1\]](https://python-all.ru/3.13/tutorial/introduction.html#id3):6061```python62>>> 5 ** 2  # 5 в квадрате632564>>> 2 ** 7  # 2 в степени 76512866```6768Знак равенства (`=`) используется для присваивания значения переменной. После этого результат не отображается до следующего интерактивного приглашения:6970```python71>>> width = 2072>>> height = 5 * 973>>> width * height7490075```7677Если переменная не «определена» (ей не присвоено значение), попытка её использования приведёт к ошибке:7879```python80>>> n  # попытка обращения к неопределённой переменной81Traceback (most recent call last):82  File "<stdin>", line 1, in <module>83NameError: name 'n' is not defined84```8586Имеется полная поддержка чисел с плавающей запятой; операторы со смешанными типами операндов преобразуют целочисленный операнд в число с плавающей запятой:8788```python89>>> 4 * 3.75 - 19014.091```9293В интерактивном режиме последнее выведенное выражение присваивается переменной `_`. Это означает, что при использовании Python в качестве настольного калькулятора несколько упрощается продолжение вычислений, например:9495```python96>>> tax = 12.5 / 10097>>> price = 100.5098>>> price * tax9912.5625100>>> price + _101113.0625102>>> round(_, 2)103113.06104```105106Эту переменную следует рассматривать как доступную только для чтения. Не присваивайте ей значение явно – это создаст независимую локальную переменную с тем же именем, которая будет скрывать встроенную переменную с её магическим поведением.107108В дополнение к [`int`](https://python-all.ru/3.13/library/functions.html#int) и [`float`](https://python-all.ru/3.13/library/functions.html#float) Python поддерживает и другие типы чисел, такие как [`Decimal`](https://python-all.ru/3.13/library/decimal.html#decimal.Decimal) и [`Fraction`](https://python-all.ru/3.13/library/fractions.html#fractions.Fraction). Python также имеет встроенную поддержку [комплексных чисел](https://python-all.ru/3.13/library/stdtypes.html#typesnumeric), и использует суффикс `j` или `J` для обозначения мнимой части (например, `3+5j`).109110### 3.1.2. Текст111112Python может работать с текстом (представленным типом [`str`](https://python-all.ru/3.13/library/stdtypes.html#str), так называемыми «строками») так же, как с числами. Это включает символы «`!`», слова «`rabbit`», имена «`Paris`», предложения «`Got your back.`» и т. д. «`Yay! :)`». Они могут быть заключены в одинарные (`'...'`) или двойные (`"..."`) кавычки с одинаковым результатом [\[2\]](https://python-all.ru/3.13/tutorial/introduction.html#id4).113114```pycon115>>> 'spam eggs'  # одинарные кавычки116'spam eggs'117>>> "Paris rabbit got your back :)! Yay!"  # двойные кавычки118'Paris rabbit got your back :)! Yay!'119>>> '1975'  # цифры и числа в кавычках – тоже строки120'1975'121```122123Чтобы процитировать кавычку, необходимо «экранировать» её, поставив перед ней `\`. В качестве альтернативы можно использовать другой тип кавычек:124125```python126>>> 'doesn\'t'  # используйте \' для экранирования одинарной кавычки...127"doesn't"128>>> "doesn't"  # ...или используйте двойные кавычки129"doesn't"130>>> '"Yes," they said.'131'"Yes," they said.'132>>> "\"Yes,\" they said."133'"Yes," they said.'134>>> '"Isn\'t," they said.'135'"Isn\'t," they said.'136```137138В оболочке Python определение строки и вывод строки могут выглядеть по-разному. Функция [`print()`](https://python-all.ru/3.13/library/functions.html#print) выводит более читаемый результат, опуская обрамляющие кавычки и печатая экранированные и специальные символы:139140```python141>>> s = 'First line.\nSecond line.'  # \n означает новую строку142>>> s  # без print(), специальные символы включаются в строку143'First line.\nSecond line.'144>>> print(s)  # с print(), специальные символы интерпретируются, поэтому \n создаёт новую строку145First line.146Second line.147```148149Если вы не хотите, чтобы символы, перед которыми стоит `\`, интерпретировались как специальные, можно использовать *сырые строки*, добавив `r` перед первой кавычкой:150151```python152>>> print('C:\this\name')  # здесь \t означает табуляцию, \n – новую строку153C:      his154ame155>>> print(r'C:\this\name')  # обратите внимание на r перед кавычкой156C:\this\name157```158159Есть один тонкий момент, касающийся сырых строк: сырая строка не может заканчиваться нечётным количеством символов `\`; см. [запись в FAQ](https://python-all.ru/3.13/faq/programming.html#faq-programming-raw-string-backslash) для получения дополнительной информации и обходных путей.160161Строковые литералы могут занимать несколько строк. Один из способов – использование тройных кавычек: `"""..."""` или `'''...'''`. Символы конца строки автоматически включаются в строку, но это можно предотвратить, добавив `\` в конце строки. В следующем примере начальный символ новой строки не включается:162163```python164>>> print("""\165... Usage: thingy [OPTIONS]166...      -h                        Display this usage message167...      -H hostname               Hostname to connect to168... """)169Usage: thingy [OPTIONS]170     -h                        Display this usage message171     -H hostname               Hostname to connect to172173>>>174```175176Строки можно объединять (склеивать) оператором `+` и повторять оператором `*`:177178```python179>>> # 3 раза 'un', затем 'ium'180>>> 3 * 'un' + 'ium'181'unununium'182```183184Два или более *строковых литерала* (то есть заключённых в кавычки), расположенные рядом, автоматически объединяются.185186```python187>>> 'Py' 'thon'188'Python'189```190191Эта возможность особенно полезна, когда нужно разбить длинные строки:192193```python194>>> text = ('Put several strings within parentheses '195...         'to have them joined together.')196>>> text197'Put several strings within parentheses to have them joined together.'198```199200Однако это работает только с двумя литералами, но не с переменными или выражениями:201202```python203>>> prefix = 'Py'204>>> prefix 'thon'  # нельзя объединить переменную и строковый литерал205  File "<stdin>", line 1206    prefix 'thon'207           ^^^^^^208SyntaxError: invalid syntax209>>> ('un' * 3) 'ium'210  File "<stdin>", line 1211    ('un' * 3) 'ium'212               ^^^^^213SyntaxError: invalid syntax214```215216Если нужно объединить переменные или переменную и литерал, используйте `+`:217218```python219>>> prefix + 'thon'220'Python'221```222223Строки можно *индексировать* (по индексу), причём первый символ имеет индекс 0. Отдельного типа для символов нет; символ – это просто строка длины один:224225```python226>>> word = 'Python'227>>> word[0]  # символ в позиции 0228'P'229>>> word[5]  # символ в позиции 5230'n'231```232233Индексы могут быть и отрицательными числами, тогда отсчёт ведётся справа:234235```python236>>> word[-1]  # последний символ237'n'238>>> word[-2]  # предпоследний символ239'o'240>>> word[-6]241'P'242```243244Обратите внимание: поскольку -0 совпадает с 0, отрицательные индексы начинаются с -1.245246Помимо индексирования поддерживаются также *срезы*. Если индексирование используется для получения отдельных символов, то *срез* позволяет получить подстроку:247248```python249>>> word[0:2]  # символы с позиции 0 (включительно) по 2 (исключительно)250'Py'251>>> word[2:5]  # символы с позиции 2 (включительно) до 5 (исключительно)252'tho'253```254255Индексы среза имеют полезные значения по умолчанию: опущенный первый индекс по умолчанию равен нулю, а опущенный второй – длине строки, из которой берётся срез.256257```python258>>> word[:2]   # символ от начала до позиции 2 (исключительно)259'Py'260>>> word[4:]   # символы с позиции 4 (включительно) до конца261'on'262>>> word[-2:]  # символы с предпоследнего (включительно) до конца263'on'264```265266Обратите внимание, что начальный индекс всегда включается, а конечный – всегда исключается. Это гарантирует, что `s[:i] + s[i:]` всегда равно `s`:267268```python269>>> word[:2] + word[2:]270'Python'271>>> word[:4] + word[4:]272'Python'273```274275Один из способов запомнить, как работают срезы – представлять индексы *между* символами, причём левый край первого символа имеет номер 0. Тогда правый край последнего символа строки из *n* символов имеет индекс *n*, например:276277```python278 +---+---+---+---+---+---+279 | P | y | t | h | o | n |280 +---+---+---+---+---+---+281 0   1   2   3   4   5   6282-6  -5  -4  -3  -2  -1283```284285Первая строка чисел показывает позиции индексов 0…6 в строке; вторая строка – соответствующие отрицательные индексы. Срез от *i* до *j* состоит из всех символов между границами, помеченными *i* и *j* соответственно.286287Для неотрицательных индексов длина среза равна разности индексов, если оба находятся в допустимом диапазоне. Например, длина `word[1:3]` равна 2.288289Попытка использовать слишком большой индекс приведёт к ошибке:290291```python292>>> word[42]  # в слове всего 6 символов293Traceback (most recent call last):294  File "<stdin>", line 1, in <module>295IndexError: string index out of range296```297298Однако выход за границы при использовании индексов среза обрабатывается без ошибок:299300```python301>>> word[4:42]302'on'303>>> word[42:]304''305```306307Строки Python нельзя изменить – они являются [неизменяемыми](https://python-all.ru/3.13/glossary.html#term-immutable). Поэтому попытка присвоения значения элементу строки по индексу приводит к ошибке:308309```python310>>> word[0] = 'J'311Traceback (most recent call last):312  File "<stdin>", line 1, in <module>313TypeError: 'str' object does not support item assignment314>>> word[2:] = 'py'315Traceback (most recent call last):316  File "<stdin>", line 1, in <module>317TypeError: 'str' object does not support item assignment318```319320Если нужна другая строка, следует создать новую:321322```python323>>> 'J' + word[1:]324'Jython'325>>> word[:2] + 'py'326'Pypy'327```328329Встроенная функция [`len()`](https://python-all.ru/3.13/library/functions.html#len) возвращает длину строки:330331```python332>>> s = 'supercalifragilisticexpialidocious'333>>> len(s)33434335```336337> **См. также**338>339> **[Тип текстовой последовательности – str](https://python-all.ru/3.13/library/stdtypes.html#textseq)**340>341> Строки – это пример *типов-последовательностей* и поддерживают общие операции, характерные для таких типов.342>343> **[Методы строк](https://python-all.ru/3.13/library/stdtypes.html#string-methods)**344>345> Строки поддерживают множество методов для базовых преобразований и поиска.346>347> **[f-строки](https://python-all.ru/3.13/reference/lexical_analysis.html#f-strings)**348>349> Строковые литералы, содержащие встроенные выражения.350>351> **[Синтаксис форматирования строк](https://python-all.ru/3.13/library/string.html#formatstrings)**352>353> Информация о форматировании строк с помощью [`str.format()`](https://python-all.ru/3.13/library/stdtypes.html#str.format).354>355> **[Строковое форматирование в стиле printf](https://python-all.ru/3.13/library/stdtypes.html#old-string-formatting)**356>357> Старые операции форматирования, которые вызываются, когда строка является левым операндом оператора `%`, описаны здесь более подробно.358359### 3.1.3. Списки360361Python поддерживает несколько *составных* типов данных, используемых для объединения других значений. Самый универсальный из них – *список* (list), который можно записать как список разделённых запятыми значений (элементов) в квадратных скобках. Списки могут содержать элементы разных типов, но обычно все элементы имеют один и тот же тип.362363```python364>>> squares = [1, 4, 9, 16, 25]365>>> squares366[1, 4, 9, 16, 25]367```368369Как и строки (и все остальные встроенные [последовательные](https://python-all.ru/3.13/glossary.html#term-sequence) типы), списки можно индексировать и извлекать из них срезы:370371```python372>>> squares[0]  # индексация возвращает элемент3731374>>> squares[-1]37525376>>> squares[-3:]  # срез возвращает новый список377[9, 16, 25]378```379380Списки также поддерживают операции, например, конкатенацию:381382```python383>>> squares + [36, 49, 64, 81, 100]384[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]385```386387В отличие от строк, которые являются [неизменяемыми](https://python-all.ru/3.13/glossary.html#term-immutable), списки – [изменяемый](https://python-all.ru/3.13/glossary.html#term-mutable) тип, то есть их содержимое можно изменять:388389```python390>>> cubes = [1, 8, 27, 65, 125]  # здесь что-то не так391>>> 4 ** 3  # куб 4 равен 64, а не 65!39264393>>> cubes[3] = 64  # заменить неверное значение394>>> cubes395[1, 8, 27, 64, 125]396```397398Также можно добавлять новые элементы в конец списка с помощью [`list.append()`](https://python-all.ru/3.13/library/stdtypes.html#list.append) *метода* (о методах мы узнаем подробнее позже):399400```python401>>> cubes.append(216)  # добавить куб 6402>>> cubes.append(7 ** 3)  # и куб 7403>>> cubes404[1, 8, 27, 64, 125, 216, 343]405```406407Простое присваивание в Python никогда не копирует данные. Когда вы присваиваете список переменной, эта переменная ссылается на *существующий список*. Любые изменения, вносимые в список через одну переменную, будут видны через все остальные переменные, которые на него ссылаются.:408409```python410>>> rgb = ["Red", "Green", "Blue"]411>>> rgba = rgb412>>> id(rgb) == id(rgba)  # они ссылаются на один и тот же объект413True414>>> rgba.append("Alph")415>>> rgb416["Red", "Green", "Blue", "Alph"]417```418419Все операции среза возвращают новый список, содержащий запрошенные элементы. Это означает, что следующий срез возвращает [поверхностную копию](https://python-all.ru/3.13/library/copy.html#shallow-vs-deep-copy) списка:420421```python422>>> correct_rgba = rgba[:]423>>> correct_rgba[-1] = "Alpha"424>>> correct_rgba425["Red", "Green", "Blue", "Alpha"]426>>> rgba427["Red", "Green", "Blue", "Alph"]428```429430Присваивание срезам также возможно, и это может даже изменить размер списка или полностью его очистить:431432```python433>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']434>>> letters435['a', 'b', 'c', 'd', 'e', 'f', 'g']436>>> # заменить некоторые значения437>>> letters[2:5] = ['C', 'D', 'E']438>>> letters439['a', 'b', 'C', 'D', 'E', 'f', 'g']440>>> # теперь удалить их441>>> letters[2:5] = []442>>> letters443['a', 'b', 'f', 'g']444>>> # очистить список, заменив все элементы пустым списком445>>> letters[:] = []446>>> letters447[]448```449450Встроенная функция [`len()`](https://python-all.ru/3.13/library/functions.html#len) также применима к спискам:451452```python453>>> letters = ['a', 'b', 'c', 'd']454>>> len(letters)4554456```457458Списки можно вкладывать друг в друга (создавать списки, содержащие другие списки), например:459460```python461>>> a = ['a', 'b', 'c']462>>> n = [1, 2, 3]463>>> x = [a, n]464>>> x465[['a', 'b', 'c'], [1, 2, 3]]466>>> x[0]467['a', 'b', 'c']468>>> x[0][1]469'b'470```471472## 3.2. Первые шаги в программировании473474Конечно, Python можно использовать и для более сложных задач, чем сложение двух и двух. Например, можно вывести начальный отрезок [ряда Фибоначчи](https://python-all.ru/3.13/tutorial/introduction.html) следующим образом:475476```python477>>> # ряд Фибоначчи:478>>> # сумма двух элементов определяет следующий479>>> a, b = 0, 1480>>> while a < 10:481...     print(a)482...     a, b = b, a+b483...4840485148614872488348954908491```492493В этом примере представлено несколько новых возможностей.494495- Первая строка содержит *множественное присваивание*: переменные `a` и `b` одновременно получают новые значения 0 и 1. В последней строке этот приём используется снова, показывая, что выражения в правой части вычисляются до того, как будет выполнено любое из присваиваний. Выражения в правой части вычисляются слева направо.496- Цикл [`while`](https://python-all.ru/3.13/reference/compound_stmts.html#while) выполняется, пока условие (в данном случае: `a < 10`) остаётся истинным. В Python, как и в C, любое ненулевое целое число считается истинным; ноль – ложным. Условием может также быть строка или список, в общем, любая последовательность: всё, что имеет ненулевую длину, истинно, а пустые последовательности ложны. Проверка, используемая в примере, – это простое сравнение. Стандартные операторы сравнения записываются так же, как в C: `<` (меньше), `>` (больше), `==` (равно), `<=` (меньше или равно), `>=` (больше или равно) и `!=` (не равно).497- *Тело* цикла *отступает*: отступы – это способ Python группировать инструкции. В интерактивной подсказке нужно вводить табуляцию или пробел(ы) для каждой строки с отступом. На практике для более сложного ввода в Python готовят код в текстовом редакторе; все приличные редакторы имеют функцию автоматического отступа. При интерактивном вводе составной инструкции после неё должна следовать пустая строка, чтобы указать завершение (поскольку синтаксический анализатор не может угадать, когда введена последняя строка). Обратите внимание, что каждая строка внутри одного базового блока должна иметь одинаковый отступ.498- Функция [`print()`](https://python-all.ru/3.13/library/functions.html#print) выводит значение переданного ей аргумента (или аргументов). Она отличается от простого написания выражения (как мы делали раньше в примерах с калькулятором) тем, как обрабатывает несколько аргументов, числа с плавающей запятой и строки. Строки выводятся без кавычек, а между элементами вставляется пробел, так что можно красиво отформатировать вывод, например так:499500  ```python501  >>> i = 256*256502  >>> print('The value of i is', i)503  The value of i is 65536504  ```505506  Именованный аргумент *end* можно использовать, чтобы избежать перевода строки после вывода или завершить вывод другой строкой:507508  ```python509  >>> a, b = 0, 1510  >>> while a < 1000:511  ...     print(a, end=',')512  ...     a, b = b, a+b513  ...514  0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,515  ```516517Сноски518519\[[1](https://python-all.ru/3.13/tutorial/introduction.html#id1)\]520521Поскольку `**` имеет более высокий приоритет, чем `-`, `-3**2` будет интерпретировано как `-(3**2)` и в результате даст `-9`. Чтобы избежать этого и получить `9`, можно использовать `(-3)**2`.522523\[[2](https://python-all.ru/3.13/tutorial/introduction.html#id2)\]524525В отличие от других языков, специальные символы, такие как `\n`, имеют одинаковое значение как в одинарных (`'...'`), так и в двойных (`"..."`) кавычках. Единственное различие между ними: внутри одинарных кавычек не нужно eкранировать `"` (но нужно экранировать `\'`), и наоборот.526