Введение
В этом справочном руководстве описан язык программирования Python. Оно не предназначено для обучения.
Хотя я стараюсь быть максимально точным, я решил использовать английский язык вместо формальных спецификаций для всего, кроме синтаксиса и лексического анализа. Это должно сделать документ более понятным для обычного читателя, но оставит место для неоднозначностей. Поэтому, если бы вы прилетели с Марса и попытались заново реализовать Python, опираясь только на этот документ, вам, возможно, пришлось бы кое-что угадывать, и в итоге вы, вероятно, реализовали бы совершенно другой язык. С другой стороны, если вы пользуетесь Python и хотите узнать точные правила, относящиеся к определённой области языка, вы определённо сможете найти их здесь. Если вы хотели бы увидеть более формальное определение языка, возможно, вы могли бы уделить этому своё время — или изобрести машину для клонирования :-).
Добавлять слишком много подробностей реализации в справочный документ по языку опасно: реализация может измениться, а другие реализации того же языка могут работать иначе. С другой стороны, CPython — единственная широко распространённая реализация Python (хотя альтернативные реализации продолжают набирать популярность), и иногда стоит упомянуть её особенности, особенно если реализация накладывает дополнительные ограничения. Поэтому в тексте вы встретите короткие «примечания по реализации».
Каждая реализация Python включает ряд встроенных и стандартных модулей. Они описаны в Стандартной библиотеке Python. Некоторые встроенные модули упоминаются, когда они существенно взаимодействуют с определением языка.
1.1. Альтернативные реализации
Хотя существует одна реализация Python, значительно превосходящая остальные по популярности, есть несколько альтернативных реализаций, представляющих особый интерес для разных аудиторий.
К известным реализациям относятся:
- CPython
-
Это исходная и наиболее активно поддерживаемая реализация Python, написанная на C. Новые возможности языка обычно сначала появляются здесь.
- Jython
-
Реализация Python на Java. Её можно использовать как язык сценариев для приложений Java или для создания приложений с помощью библиотек классов Java. Её также часто используют для создания тестов библиотек Java. Дополнительную информацию можно найти на сайте Jython.
- Python for .NET
-
Эта реализация фактически использует реализацию CPython, но представляет собой управляемое приложение .NET и предоставляет доступ к библиотекам .NET. Она была создана Брайаном Ллойдом. Дополнительную информацию см. на главной странице Python for .NET.
- IronPython
-
Альтернативная реализация Python for .NET. В отличие от Python.NET, это полноценная реализация Python, которая генерирует IL и компилирует код Python непосредственно в сборки .NET. Её создал Джим Хьюгин, первоначальный создатель Jython. Дополнительную информацию см. на сайте IronPython.
- PyPy
-
Реализация Python, полностью написанная на Python. Она поддерживает ряд дополнительных возможностей, отсутствующих в других реализациях, таких как поддержка stackless и компилятор Just in Time. Одна из целей проекта — поощрять экспериментирование с самим языком, упрощая модификацию интерпретатора (поскольку он написан на Python). Дополнительную информацию можно найти на главной странице проекта PyPy.
Каждая из этих реализаций в чём-либо отличается от языка, описанного в этом руководстве, или содержит специфическую информацию, выходящую за рамки стандартной документации Python. Обратитесь к документации конкретной реализации, чтобы выяснить, что ещё необходимо знать о используемой вами реализации.
1.2. Обозначения
В описаниях лексического анализа и синтаксиса используется модифицированная грамматическая нотация Бэкуса — Наура (BNF). В ней используется следующий формат определения:
name ::= lc_letter (lc_letter | "_")* lc_letter ::= "a"..."z"
В первой строке говорится, что name — это lc_letter, за которым следует последовательность из нуля или более lc_letter и символов подчёркивания. В свою очередь, lc_letter — это любой из отдельных символов от 'a' до 'z'. (Это правило действительно соблюдается для имён, определённых в лексических и грамматических правилах этого документа.)
Каждое правило начинается с имени (имени, определяемого правилом), за которым следует ::=. Вертикальная черта (|) используется для разделения альтернатив; в этой нотации это оператор с наименьшим приоритетом. Звёздочка (*) означает ноль или более повторений предшествующего элемента; аналогично, плюс (+) означает одно или более повторений, а фраза в квадратных скобках ([ ]) — ноль или одно вхождение (другими словами, заключённая в скобки фраза является необязательной). Операторы * и + имеют максимально возможный приоритет; для группировки используются круглые скобки. Строковые литералы заключаются в кавычки. Пробельные символы имеют значение только для разделения токенов. Обычно правила записываются в одну строку; правила со множеством альтернатив могут оформляться иначе: каждая строка после первой начинается с вертикальной черты.
В лексических определениях (как в примере выше) используются ещё два соглашения: два литеральных символа, разделённые тремя точками, обозначают выбор любого отдельного символа из указанного диапазона символов ASCII, включая его границы. Фраза в угловых скобках (<...>) даёт неформальное описание определяемого символа; например, при необходимости таким образом можно описать понятие «управляющий символ».
Хотя используемая нотация почти одинакова, между значениями лексических и синтаксических определений есть большое различие: лексическое определение применяется к отдельным символам исходного текста, тогда как синтаксическое определение применяется к потоку токенов, сгенерированному в ходе лексического анализа. Все применения BNF в следующей главе («Лексический анализ») представляют собой лексические определения; применения в последующих главах — синтаксические определения.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/reference/introduction.html