introduction.md · Markdown – Документация Python
Документация Python неофициальный перевод

introduction.md

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

1> **Источник:** https://python-all.ru/3/reference/introduction.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 1. Введение89Этот справочник описывает язык программирования Python. Он не является учебным пособием.1011Хотя я стараюсь быть максимально точным, я решил использовать английский, а не формальные спецификации для всего, кроме синтаксиса и лексического анализа. Это должно сделать документ более понятным для среднего читателя, но оставляет место для неоднозначностей. Следовательно, если бы вы прилетели с Марса и попытались заново реализовать Python, основываясь только на этом документе, вам пришлось бы многое додумывать, и, скорее всего, в итоге получился бы совсем другой язык. С другой стороны, если вы используете Python и хотите узнать точные правила в какой-то конкретной области языка, вы определенно сможете найти их здесь. Если вам хотелось бы увидеть более формальное определение языка, возможно, вы могли бы пожертвовать своим временем – или изобрести машину для клонирования :-).1213Добавлять слишком много деталей реализации в справочный документ по языку опасно – реализация может измениться, а другие реализации того же языка могут работать иначе. С другой стороны, CPython – это единственная широко используемая реализация Python (хотя альтернативные реализации продолжают получать поддержку), и его особые причуды иногда стоит упомянуть, особенно там, где реализация накладывает дополнительные ограничения. Поэтому по всему тексту вы найдете короткие «заметки о реализации».1415Каждая реализация Python поставляется с набором встроенных и стандартных модулей. Они описаны в [Стандартной библиотеке Python](https://python-all.ru/3/library/index.html#library-index). Некоторые встроенные модули упоминаются, когда они существенно взаимодействуют с определением языка.1617## 1.1. Альтернативные реализации1819Хотя существует одна реализация Python, которая является безусловно самой популярной, есть и некоторые альтернативные реализации, представляющие особый интерес для разных аудиторий.2021Известные реализации включают:2223**CPython**2425Это оригинальная и наиболее поддерживаемая реализация Python, написанная на C. Новые возможности языка обычно появляются сначала здесь.2627**Jython**2829Python, реализованный на Java. Эта реализация может использоваться как скриптовый язык для Java-приложений или для создания приложений с использованием библиотек классов Java. Она также часто используется для создания тестов для Java-библиотек. Дополнительную информацию можно найти на [сайте Jython](https://python-all.ru/3/reference/introduction.html).3031**Python for .NET**3233Эта реализация на самом деле использует CPython, но является управляемым .NET-приложением и предоставляет доступ к библиотекам .NET. Она была создана Brian Lloyd. Для получения дополнительной информации см. [домашнюю страницу Python for .NET](https://python-all.ru/3/reference/introduction.html).3435**IronPython**3637Альтернативный Python для .NET. В отличие от Python.NET, это полноценная реализация Python, которая генерирует IL и компилирует код Python непосредственно в сборки .NET. Она была создана Jim Hugunin, оригинальным создателем Jython. Для получения дополнительной информации см. [сайт IronPython](https://python-all.ru/3/reference/introduction.html).3839**PyPy**4041Реализация Python, полностью написанная на Python. Она поддерживает несколько расширенных возможностей, отсутствующих в других реализациях, таких как поддержка stackless и JIT-компилятор. Одна из целей проекта – стимулировать эксперименты с самим языком, упрощая модификацию интерпретатора (поскольку он написан на Python). Дополнительная информация доступна на [домашней странице проекта PyPy](https://python-all.ru/3/reference/introduction.html).4243Каждая из этих реализаций в той или иной степени отличается от языка, описанного в данном руководстве, или содержит дополнительную информацию, выходящую за рамки стандартной документации Python. Обратитесь к документации конкретной реализации, чтобы узнать все необходимое о той реализации, которую вы используете.4445## 1.2. Нотация4647Описания лексического анализа и синтаксиса используют грамматическую нотацию, представляющую собой смесь [EBNF](https://python-all.ru/3/reference/introduction.html) и [PEG](https://python-all.ru/3/reference/introduction.html). Например:4849```5051name:   letter (letter | digit | "_")*52letter: "a"..."z" | "A"..."Z"53digit:  "0"..."9"54```5556В этом примере первая строка говорит, что `name` – это `letter`, за которым следует последовательность из нуля или более `letter`, `digit` и символов подчеркивания. `letter`, в свою очередь, – это любой из отдельных символов от `'a'` до `'z'` и от `A` до `Z`; `digit` – это отдельный символ от `0` до `9`.5758Каждое правило начинается с имени (которое идентифицирует определяемое правило), за которым следует двоеточие, `:`. Определение справа от двоеточия использует следующие синтаксические элементы:5960- `name`: Имя ссылается на другое правило. Где возможно, это ссылка на определение правила.6162  - `TOKEN`: Имя в верхнем регистре ссылается на [токен](https://python-all.ru/3/glossary.html#term-token). Для целей грамматических определений токены эквивалентны правилам.63- `"text"`, `'text'`: Текст в одинарных или двойных кавычках должен совпадать буквально (без кавычек). Тип кавычек выбирается в соответствии со значением `text`:6465  - `'if'`: Имя в одинарных кавычках обозначает [ключевое слово](https://python-all.ru/3/reference/lexical_analysis.html#keywords).66  - `"case"`: Имя в двойных кавычках обозначает [мягкое ключевое слово](https://python-all.ru/3/reference/lexical_analysis.html#soft-keywords).67  - `'@'`: символ (не буква) в одинарных кавычках обозначает [`OP`](https://python-all.ru/3/library/token.html#token.OP) токен, то есть [разделитель](https://python-all.ru/3/reference/lexical_analysis.html#delimiters) или [оператор](https://python-all.ru/3/reference/lexical_analysis.html#operators).68- `e1 e2`: элементы, разделённые только пробельными символами, обозначают последовательность. Здесь `e1` должен следовать за `e2`.69- `e1 | e2`: вертикальная черта используется для разделения альтернатив. Она обозначает «упорядоченный выбор» в PEG: если `e1` совпадает, `e2` не рассматривается. В традиционных PEG-грамматиках это записывается как косая черта `/`, а не вертикальная. См. [**PEP 617**](https://python-all.ru/3/reference/introduction.html) для дополнительной информации и подробностей.70- `e*`: звёздочка означает ноль или более повторений предыдущего элемента.71- `e+`: аналогично, плюс означает одно или более повторений.72- `[e]`: фраза в квадратных скобках означает ноль или одно вхождение. Иными словами, заключённая фраза является необязательной.73- `e?`: вопросительный знак имеет точно такое же значение, как квадратные скобки: предыдущий элемент является необязательным.74- `(e)`: круглые скобки используются для группировки.7576Следующая нотация используется только в [лексических определениях](https://python-all.ru/3/reference/introduction.html#notation-lexical-vs-syntactic).7778- `"a"..."z"`: два литеральных символа, разделённые тремя точками, означают выбор любого одного символа в заданном (включительно) диапазоне ASCII-символов.79- `<...>`: фраза в угловых скобках даёт неформальное описание соответствующего символа (например, `<any ASCII character except "\">`) или аббревиатуру, определённую в соседнем тексте (например, `<Lu>`).8081Некоторые определения также используют *опережающую проверку*, которая указывает, что элемент должен (или не должен) совпадать в заданной позиции, но без поглощения каких-либо входных данных:8283- `&e`: положительная опережающая проверка (то есть `e` должен совпасть)84- `!e`: отрицательная опережающая проверка (то есть `e` должен *не* совпасть)8586Унарные операторы (`*`, `+`, `?`) связываются настолько тесно, насколько это возможно; вертикальная черта (`|`) связывается наиболее слабо.8788Пробельные символы имеют значение только для разделения токенов.8990Правила обычно помещаются на одной строке, но слишком длинные правила могут быть перенесены:9192```9394literal: stringliteral | bytesliteral95         | integer | floatnumber | imagnumber96```9798В качестве альтернативы правила могут быть отформатированы так, что первая строка заканчивается двоеточием, а каждая альтернатива начинается с вертикальной черты на новой строке. Например:99100```101102literal:103   | stringliteral104   | bytesliteral105   | integer106   | floatnumber107   | imagnumber108```109110Это *не* означает, что существует пустая первая альтернатива.111112### 1.2.1. Лексические и синтаксические определения113114Существует некоторое различие между *лексическим* и *синтаксическим* анализом: [лексический анализатор](https://python-all.ru/3/glossary.html#term-lexical-analyzer) работает с отдельными символами исходного текста, в то время как *парсер* (синтаксический анализатор) работает с потоком [токенов](https://python-all.ru/3/glossary.html#term-token), порождённых лексическим анализом. Однако в некоторых случаях точная граница между двумя фазами является деталью реализации CPython.115116Практическое различие между ними заключается в том, что в *лексических* определениях все пробельные символы значимы. Лексический анализатор [отбрасывает](https://python-all.ru/3/reference/lexical_analysis.html#whitespace) все пробельные символы, которые не преобразуются в токены, такие как [`token.INDENT`](https://python-all.ru/3/library/token.html#token.INDENT) или [`NEWLINE`](https://python-all.ru/3/library/token.html#token.NEWLINE). *Синтаксические* определения затем используют эти токены, а не символы исходного текста.117118В этой документации используется одна и та же грамматика BNF для обоих стилей определений. Все случаи использования BNF в следующей главе ([Лексический анализ](https://python-all.ru/3/reference/lexical_analysis.html#lexical)) являются лексическими определениями; использования в последующих главах – синтаксическими определениями.119