Spec-Zone.ru › Python 3.13

Введение

В данном справочном руководстве описывается язык программирования 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 и компилятор Just in Time. Одна из целей проекта — поощрять эксперименты с самим языком, делая его более лёгким для модификации интерпретатора (поскольку он написан на Python). Дополнительную информацию можно найти на домашней странице проекта PyPy.

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

Spec-Zone.ru

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