Spec-Zone.ru › Python 3.9

Введение

В данном справочном руководстве описывается язык программирования Python. Оно не предназначено в качестве учебного пособия.

Хотя я стараюсь быть максимально точным, я выбрал использовать английский язык вместо формальных спецификаций для всего, кроме синтаксиса и лексического анализа. Это должно сделать документ более понятным для среднего читателя, но оставит место для неоднозначностей. Вследствие этого, если бы вы приехали с Марса и попытались переиспользовать Python только по этому документу, вам пришлось бы делать догадки, и на самом деле вы, вероятно, реализовали бы совершенно другой язык. С другой стороны, если вы используете Python и хотите узнать точные правила определённой области языка, вы определённо должны сможете найти их здесь. Если вы хотите увидеть более формальное определение языка, возможно, вы могли бы посвятить своё время — или изобрести машину клонирования :-).

Опасно добавлять слишком много деталей реализации в документ справочника языка — реализация может измениться, а другие реализации одного и того же языка могут работать по-разному. С другой стороны, CPython является одной реализацией Python, широко используемой (хотя альтернативные реализации продолжают получать поддержку), и её особенности иногда стоит упоминать, особенно там, где реализация накладывает дополнительные ограничения. Поэтому вы найдёте краткие «примечания о реализации», разбросанные по тексту.

Каждая реализация Python поставляется с рядом встроенных и стандартных модулей. Они документированы в Стандартной библиотеке Python. Несколько встроенных модулей упоминаются, когда они значимым образом взаимодействуют с определением языка.

1.1. Альтернативные реализации

Хотя существует одна реализация Python, которая является наиболее популярной, существуют некоторые альтернативные реализации, которые представляют особый интерес для различных аудиторий.

Известные реализации включают:

CPython

Это оригинальная и наиболее поддерживаемая реализация Python, написанная на C. Новые возможности языка обычно появляются здесь первыми.

Jython

Python, реализованный на Java. Эта реализация может использоваться в качестве языка сценариев для приложений Java или может использоваться для создания приложений с использованием библиотек классов Java. Она также часто используется для создания тестов для библиотек Java. Дополнительную информацию можно найти на веб-сайте Jython по адресу http://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 по адресу http://ironpython.net/.

PyPy

Реализация Python, написанная полностью на Python. Она поддерживает несколько расширенных функций, отсутствующих в других реализациях, таких как поддержка stackless и компилятор Just in Time. Одна из целей проекта — стимулировать экспериментирование с языком, сделав более лёгким изменение интерпретатора (поскольку он написан на Python). Дополнительную информацию можно найти на домашней странице проекта PyPy по адресу http://pypy.org/.

Каждая из этих реализаций отличается каким-то образом от языка, описанного в этом руководстве, или предоставляет конкретную информацию, выходящую за рамки стандартной документации 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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/reference/introduction.html

Spec-Zone.ru

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