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

introduction.md

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

1> **Источник:** https://python-all.ru/3.4/tutorial/introduction.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Неформальное введение в Python89В следующих примерах ввод и вывод различаются наличием или отсутствием приглашений ([*\>\>\>*](https://python-all.ru/3.4/glossary.html#term-) и [*...*](https://python-all.ru/3.4/glossary.html#term-1)): чтобы повторить пример, необходимо ввести всё после приглашения, когда оно появляется; строки, не начинающиеся с приглашения, являются выводом интерпретатора. Обратите внимание, что вторичное приглашение на отдельной строке в примере означает, что нужно ввести пустую строку; это используется для завершения многострочной команды.1011Многие примеры в этом руководстве, даже те, которые вводятся в интерактивном приглашении, содержат комментарии. Комментарии в Python начинаются с символа решётки, `#`, и продолжаются до конца физической строки. Комментарий может находиться в начале строки, после пробелов или кода, но не внутри строкового литерала. Символ решётки внутри строкового литерала – это просто символ решётки. Поскольку комментарии служат для пояснения кода и не интерпретируются Python, их можно опускать при вводе примеров.1213Несколько примеров:1415```python16# это первый комментарий17spam = 1  # а это второй комментарий18          # ... и теперь третий!19text = "# This is not a comment because it's inside quotes."20```2122## 3.1. Использование Python в качестве калькулятора2324Давайте попробуем несколько простых команд Python. Запустите интерпретатор и дождитесь основного приглашения, `>>>`. (Это не должно занять много времени.)2526### 3.1.1. Числа2728Интерпретатор работает как простой калькулятор: можно ввести выражение в него и он выведет значение. Синтаксис выражений прост: операторы `+`, `-`, `*` и `/` работают так же, как в большинстве других языков (например, Pascal или C); круглые скобки (`()`) можно использовать для группировки. Например:2930```python31>>> 2 + 232433>>> 50 - 5*6342035>>> (50 - 5*6) / 4365.037>>> 8 / 5  # деление всегда возвращает число с плавающей запятой381.639```4041Целые числа (например, `2`, `4`, `20`) относятся к типу [`int`](https://python-all.ru/3.4/library/functions.html#int), числа с дробной частью (например, `5.0`, `1.6`) – к типу [`float`](https://python-all.ru/3.4/library/functions.html#float). Далее в руководстве мы узнаем о числовых типах подробнее.4243Деление (`/`) всегда возвращает число с плавающей запятой (float). Чтобы выполнить [*целочисленное деление*](https://python-all.ru/3.4/glossary.html#term-floor-division) и получить целый результат (отбрасывая дробную часть), можно использовать оператор `//`; для вычисления остатка – `%`:4445```python46>>> 17 / 3  # классическое деление возвращает число с плавающей запятой475.66666666666666748>>>49>>> 17 // 3  # целочисленное деление отбрасывает дробную часть50551>>> 17 % 3  # оператор % возвращает остаток от деления52253>>> 5 * 3 + 2  # result * divisor + remainder541755```5657В Python можно использовать оператор `**` для возведения в степень [\[1\]](https://python-all.ru/3.4/tutorial/introduction.html#id3):5859```python60>>> 5 ** 2  # 5 в квадрате612562>>> 2 ** 7  # 2 в степени 76312864```6566Знак равенства (`=`) используется для присваивания значения переменной. После этого результат не отображается до следующего интерактивного приглашения:6768```python69>>> width = 2070>>> height = 5 * 971>>> width * height7290073```7475Если переменная не «определена» (ей не присвоено значение), попытка её использования приведёт к ошибке:7677```python78>>> n  # попытка обращения к неопределённой переменной79Traceback (most recent call last):80  File "<stdin>", line 1, in <module>81NameError: name 'n' is not defined82```8384Имеется полная поддержка чисел с плавающей запятой; операторы со смешанными типами операндов преобразуют целочисленный операнд в число с плавающей запятой:8586```python87>>> 3 * 3.75 / 1.5887.589>>> 7.0 / 2903.591```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.4/library/functions.html#int) и [`float`](https://python-all.ru/3.4/library/functions.html#float) Python поддерживает и другие типы чисел, например [`Decimal`](https://python-all.ru/3.4/library/decimal.html#decimal.Decimal) и [`Fraction`](https://python-all.ru/3.4/library/fractions.html#fractions.Fraction). Также в Python есть встроенная поддержка [*комплексных чисел*](https://python-all.ru/3.4/library/stdtypes.html#typesnumeric), при этом для обозначения мнимой части используется суффикс `j` или `J` (например, `3+5j`).109110### 3.1.2. Строки111112Помимо чисел, Python может также работать со строками, которые можно записать несколькими способами. Они могут быть заключены в одинарные кавычки (`'...'`) или dвойные кавычки (`"..."`) с одним и тем же результатом [\[2\]](https://python-all.ru/3.4/tutorial/introduction.html#id4). `\` можно использовать для экранирования кавычек:113114```python115>>> 'spam eggs'  # одинарные кавычки116'spam eggs'117>>> 'doesn\'t'  # используйте \' для экранирования одинарной кавычки...118"doesn't"119>>> "doesn't"  # ...или используйте двойные кавычки120"doesn't"121>>> '"Yes," he said.'122'"Yes," he said.'123>>> "\"Yes,\" he said."124'"Yes," he said.'125>>> '"Isn\'t," she said.'126'"Isn\'t," she said.'127```128129В интерактивном интерпретаторе выводимая строка заключается в кавычки, а специальные символы экранируются обратной косой чертой. Хотя иногда это может выглядеть не так, как ввод (кавычки могут меняться), обе строки эквивалентны. Строка заключается в двойные кавычки, если содержит одинарную кавычку и не содержит двойных, в противном случае она заключается в одинарные кавычки. Функция [`print()`](https://python-all.ru/3.4/library/functions.html#print) выводит более читаемый результат, опуская окружающие кавычки и выводя экранированные и специальные символы:130131```python132>>> '"Isn\'t," she said.'133'"Isn\'t," she said.'134>>> print('"Isn\'t," she said.')135"Isn't," she said.136>>> s = 'First line.\nSecond line.'  # \n означает новую строку137>>> s  # без print(), \n включается в вывод138'First line.\nSecond line.'139>>> print(s)  # с print(), \n создает новую строку140First line.141Second line.142```143144Если вы не хотите, чтобы символы, перед которыми стоит `\`, интерпретировались как специальные, можно использовать *сырые строки*, добавив `r` перед первой кавычкой:145146```python147>>> print('C:\some\name')  # здесь \n означает перевод строки!148C:\some149ame150>>> print(r'C:\some\name')  # обратите внимание на r перед кавычкой151C:\some\name152```153154Строковые литералы могут занимать несколько строк. Один из способов – использовать тройные кавычки: `"""..."""` или `'''...'''`. Символы конца строки автоматически включаются в строку, но это можно предотвратить, добавив `\` в конец строки. Следующий пример:155156```python157print("""\158Usage: thingy [OPTIONS]159     -h                        Display this usage message160     -H hostname               Hostname to connect to161""")162```163164выводит следующий результат (обратите внимание, что начальный перевод строки не включается):165166```text167Usage: thingy [OPTIONS]168     -h                        Display this usage message169     -H hostname               Hostname to connect to170```171172Строки можно объединять (склеивать) оператором `+` и повторять оператором `*`:173174```python175>>> # 3 раза 'un', затем 'ium'176>>> 3 * 'un' + 'ium'177'unununium'178```179180Два или более *строковых литерала* (то есть заключённых в кавычки), расположенные рядом, автоматически объединяются.181182```python183>>> 'Py' 'thon'184'Python'185```186187Однако это работает только с двумя литералами, но не с переменными или выражениями:188189```python190>>> prefix = 'Py'191>>> prefix 'thon'  # нельзя объединить переменную и строковый литерал192  ...193SyntaxError: invalid syntax194>>> ('un' * 3) 'ium'195  ...196SyntaxError: invalid syntax197```198199Если нужно объединить переменные или переменную и литерал, используйте `+`:200201```python202>>> prefix + 'thon'203'Python'204```205206Эта возможность особенно полезна, когда нужно разбить длинные строки:207208```python209>>> text = ('Put several strings within parentheses '210            'to have them joined together.')211>>> text212'Put several strings within parentheses to have them joined together.'213```214215Строки можно *индексировать* (по индексу), причём первый символ имеет индекс 0. Отдельного типа для символов нет; символ – это просто строка длины один:216217```python218>>> word = 'Python'219>>> word[0]  # символ в позиции 0220'P'221>>> word[5]  # символ в позиции 5222'n'223```224225Индексы могут быть и отрицательными числами, тогда отсчёт ведётся справа:226227```python228>>> word[-1]  # последний символ229'n'230>>> word[-2]  # предпоследний символ231'o'232>>> word[-6]233'P'234```235236Обратите внимание: поскольку -0 совпадает с 0, отрицательные индексы начинаются с -1.237238Помимо индексации также поддерживается *срезы*. Если индексация используется для получения отдельных символов, то *срезы* позволяют получить подстроку:239240```python241>>> word[0:2]  # символы с позиции 0 (включительно) по 2 (исключительно)242'Py'243>>> word[2:5]  # символы с позиции 2 (включительно) до 5 (исключительно)244'tho'245```246247Обратите внимание: начальный индекс всегда включается, а конечный всегда исключается. Благодаря этому `s[:i] + s[i:]` всегда равно `s`:248249```python250>>> word[:2] + word[2:]251'Python'252>>> word[:4] + word[4:]253'Python'254```255256Индексы среза имеют полезные значения по умолчанию: опущенный первый индекс по умолчанию равен нулю, а опущенный второй – длине строки, из которой берётся срез.257258```python259>>> word[:2]  # символ от начала до позиции 2 (исключительно)260'Py'261>>> word[4:]  # символы с позиции 4 (включительно) до конца262'on'263>>> word[-2:] # символы с предпоследнего (включительно) до конца264'on'265```266267Один из способов запомнить, как работают срезы – представлять индексы *между* символами, причём левый край первого символа имеет номер 0. Тогда правый край последнего символа строки из *n* символов имеет индекс *n*, например:268269```python270 +---+---+---+---+---+---+271 | P | y | t | h | o | n |272 +---+---+---+---+---+---+273 0   1   2   3   4   5   6274-6  -5  -4  -3  -2  -1275```276277В первой строке чисел показаны позиции индексов 0...6 в строке; во второй – соответствующие отрицательные индексы. Срез от *i* до *j* состоит из всех символов между границами, помеченными *i* и *j*, соответственно.278279Для неотрицательных индексов длина среза равна разности индексов, если оба находятся в пределах границ. Например, длина `word[1:3]` равна 2.280281Попытка использовать слишком большой индекс приведёт к ошибке:282283```python284>>> word[42]  # в слове всего 6 символов285Traceback (most recent call last):286  File "<stdin>", line 1, in <module>287IndexError: string index out of range288```289290Однако выход за границы при использовании индексов среза обрабатывается без ошибок:291292```python293>>> word[4:42]294'on'295>>> word[42:]296''297```298299Строки Python нельзя изменить – они являются [*неизменяемыми*](https://python-all.ru/3.4/glossary.html#term-immutable). Поэтому попытка присвоения значения элементу строки по индексу приводит к ошибке:300301```python302>>> word[0] = 'J'303  ...304TypeError: 'str' object does not support item assignment305>>> word[2:] = 'py'306  ...307TypeError: 'str' object does not support item assignment308```309310Если нужна другая строка, следует создать новую:311312```python313>>> 'J' + word[1:]314'Jython'315>>> word[:2] + 'py'316'Pypy'317```318319Встроенная функция [`len()`](https://python-all.ru/3.4/library/functions.html#len) возвращает длину строки:320321```python322>>> s = 'supercalifragilisticexpialidocious'323>>> len(s)32434325```326327> **См. также**328>329> **[*Тип текстовой последовательности – str*](https://python-all.ru/3.4/library/stdtypes.html#textseq)**330>331> Строки – это пример332>333> *типов-последовательностей*334>335> и поддерживают общие операции, характерные для таких типов.336>337> **[*Методы строк*](https://python-all.ru/3.4/library/stdtypes.html#string-methods)**338>339> Строки поддерживают множество методов для базовых преобразований и поиска.340>341> **[*Форматирование строк*](https://python-all.ru/3.4/library/string.html#string-formatting)**342>343> Информация о форматировании строк с помощью344>345> [`str.format()`](https://python-all.ru/3.4/library/stdtypes.html#str.format)346>347> описана здесь.348>349> **[*Строковое форматирование в стиле printf*](https://python-all.ru/3.4/library/stdtypes.html#old-string-formatting)**350>351> Старые операции форматирования, которые выполняются, когда строки и строки Unicode являются левым операндом оператора352>353> `%`354>355> , подробнее описаны здесь.356357### 3.1.3. Списки358359Python поддерживает несколько *составных* типов данных, используемых для объединения других значений. Самый универсальный из них – *список* (list), который можно записать как список разделённых запятыми значений (элементов) в квадратных скобках. Списки могут содержать элементы разных типов, но обычно все элементы имеют один и тот же тип.360361```python362>>> squares = [1, 4, 9, 16, 25]363>>> squares364[1, 4, 9, 16, 25]365```366367Как и строки (и все остальные встроенные [*последовательные*](https://python-all.ru/3.4/glossary.html#term-sequence) типы), списки поддерживают индексацию и срезы:368369```python370>>> squares[0]  # индексация возвращает элемент3711372>>> squares[-1]37325374>>> squares[-3:]  # срез возвращает новый список375[9, 16, 25]376```377378Все операции со срезами возвращают новый список, содержащий запрошенные элементы. Это означает, что следующий срез возвращает новую (поверхностную) копию списка:379380```python381>>> squares[:]382[1, 4, 9, 16, 25]383```384385Списки также поддерживают операции, например, конкатенацию:386387```python388>>> squares + [36, 49, 64, 81, 100]389[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]390```391392В отличие от строк, которые являются [*неизменяемыми*](https://python-all.ru/3.4/glossary.html#term-immutable), списки – [*изменяемый*](https://python-all.ru/3.4/glossary.html#term-mutable) тип, то есть их содержимое можно изменять:393394```python395>>> cubes = [1, 8, 27, 65, 125]  # здесь что-то не так396>>> 4 ** 3  # куб 4 равен 64, а не 65!39764398>>> cubes[3] = 64  # заменить неверное значение399>>> cubes400[1, 8, 27, 64, 125]401```402403Новые элементы можно также добавлять в конец списка с помощью `append()` *метода* (о методах мы поговорим позже):404405```python406>>> cubes.append(216)  # добавить куб 6407>>> cubes.append(7 ** 3)  # и куб 7408>>> cubes409[1, 8, 27, 64, 125, 216, 343]410```411412Присваивание срезам также возможно, и это может даже изменить размер списка или полностью его очистить:413414```python415>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']416>>> letters417['a', 'b', 'c', 'd', 'e', 'f', 'g']418>>> # заменить некоторые значения419>>> letters[2:5] = ['C', 'D', 'E']420>>> letters421['a', 'b', 'C', 'D', 'E', 'f', 'g']422>>> # теперь удалить их423>>> letters[2:5] = []424>>> letters425['a', 'b', 'f', 'g']426>>> # очистить список, заменив все элементы пустым списком427>>> letters[:] = []428>>> letters429[]430```431432Встроенная функция [`len()`](https://python-all.ru/3.4/library/functions.html#len) применима также и к спискам:433434```python435>>> letters = ['a', 'b', 'c', 'd']436>>> len(letters)4374438```439440Списки можно вкладывать друг в друга (создавать списки, содержащие другие списки), например:441442```python443>>> a = ['a', 'b', 'c']444>>> n = [1, 2, 3]445>>> x = [a, n]446>>> x447[['a', 'b', 'c'], [1, 2, 3]]448>>> x[0]449['a', 'b', 'c']450>>> x[0][1]451'b'452```453454## 3.2. Первые шаги к программированию455456Конечно, с помощью Python можно решать и более сложные задачи, чем сложение двух и двух. Например, можно вывести начальную подпоследовательность ряда *Фибоначчи* следующим образом:457458```python459>>> # ряд Фибоначчи:460... # сумма двух элементов определяет следующий461... a, b = 0, 1462>>> while b < 10:463...     print(b)464...     a, b = b, a+b465...466146714682469347054718472```473474В этом примере представлено несколько новых возможностей.475476- В первой строке используется *множественное присваивание*: переменные `a` и `b` одновременно получают новые значения 0 и 1. В последней строке этот приём используется снова; это демонстрирует, что сначала вычисляются все выражения в правой части, и только потом выполняются присваивания. Выражения в правой части вычисляются слева направо.477- Цикл [`while`](https://python-all.ru/3.4/reference/compound_stmts.html#while) выполняется, пока условие (в примере: `b < 10`) остаётся истинным. В Python, как и в C, любое целое ненулевое значение – истина, ноль – ложь. Условием может быть также строка, список или любая последовательность: всё, что имеет ненулевую длину, – истина, пустые последовательности – ложь. Проверка в примере – это простое сравнение. Стандартные операторы сравнения записываются так же, как в C: `<` (меньше), `>` (больше), `==` (равно), `<=` (меньше или равно), `>=` (больше или равно) и `!=` (не равно).478- *Тело* цикла *отступает*: отступы – это способ Python группировать инструкции. В интерактивной подсказке нужно вводить табуляцию или пробел(ы) для каждой строки с отступом. На практике для более сложного ввода в Python готовят код в текстовом редакторе; все приличные редакторы имеют функцию автоматического отступа. При интерактивном вводе составной инструкции после неё должна следовать пустая строка, чтобы указать завершение (поскольку синтаксический анализатор не может угадать, когда введена последняя строка). Обратите внимание, что каждая строка внутри одного базового блока должна иметь одинаковый отступ.479- Функция [`print()`](https://python-all.ru/3.4/library/functions.html#print) выводит значение переданных ей аргументов. Она отличается от простой записи выражения (как мы делали ранее в примерах с калькулятором) тем, как обрабатывает множественные аргументы, числа с плавающей запятой и строки. Строки выводятся без кавычек, а между элементами вставляется пробел, так что можно красиво отформатировать вывод, например:480481  ```python482  >>> i = 256*256483  >>> print('The value of i is', i)484  The value of i is 65536485  ```486487  Именованный аргумент *end* можно использовать, чтобы избежать перевода строки после вывода или завершить вывод другой строкой:488489  ```python490  >>> a, b = 0, 1491  >>> while b < 1000:492  ...     print(b, end=',')493  ...     a, b = b, a+b494  ...495  1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,496  ```497498Сноски499500| [\[1\]](https://python-all.ru/3.4/tutorial/introduction.html#id1) | Поскольку `**` имеет более высокий приоритет, чем `-`, `-3**2` будет интерпретировано как `-(3**2)` и в результате даст `-9`. Чтобы избежать этого и получить `9`, можно использовать `(-3)**2`. |501| --- | --- |502503| [\[2\]](https://python-all.ru/3.4/tutorial/introduction.html#id2) | В отличие от других языков, специальные символы, такие как `\n`, имеют одинаковое значение как в одинарных (`'...'`), так и в двойных (`"..."`) кавычках. Единственное различие между ними: внутри одинарных кавычек не нужно экранировать `"` (но нужно экранировать `\'`), и наоборот. |504| --- | --- |505