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