Spec-Zone.ru › Python 3.11

Введение

В этом справочном руководстве описывается язык программирования 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API