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