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