Spec-Zone.ru › Python 3.12

Введение

Это справочное руководство описывает язык программирования 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 for .NET. В отличие от Python.NET, это полноценная реализация Python, генерирующая IL и компилирующая код Python непосредственно в сборки .NET. Она создана Джимом Хьюгинином, первоначальным создателем Jython. Дополнительную информацию см. на сайте IronPython.

PyPy

Реализация Python, полностью написанная на Python. Она поддерживает несколько продвинутых возможностей, отсутствующих в других реализациях, например поддержку stackless и JIT-компилятор. Одна из целей проекта — поощрять эксперименты с самим языком, упрощая изменение интерпретатора (поскольку он написан на Python). Дополнительную информацию можно найти на главной странице проекта PyPy.

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

1.2. Обозначения

В описаниях лексического анализа и синтаксиса используется модифицированная грамматическая нотация Бэкуса — Наура (BNF). Для определения правил применяется следующий формат:

name      ::= lc_letter (lc_letter | "_")*
lc_letter ::= "a"..."z"

В первой строке говорится, что name — это lc_letter, за которым следует последовательность из нуля или более lc_letters и символов подчёркивания. В свою очередь, lc_letter — это любой из отдельных символов от 'a' до 'z'. (Это правило действительно соблюдается для имён, определённых в лексических и грамматических правилах этого документа.)

Каждое правило начинается с имени (которое определяется этим правилом), за которым следует ::=. Вертикальная черта (|) используется для разделения альтернатив; в этой нотации она обладает наименьшим приоритетом. Звёздочка (*) означает ноль или более повторений предшествующего элемента; аналогично, плюс (+) означает одно или более повторений, а выражение в квадратных скобках ([ ]) — ноль или одно вхождение (иначе говоря, заключённое в скобки выражение необязательно). Операторы * и + имеют максимально возможный приоритет; для группировки используются круглые скобки. Буквальные строки заключаются в кавычки. Пробелы имеют значение только для разделения токенов. Обычно правила записываются в одну строку; правила с большим количеством альтернатив могут быть оформлены иначе: каждая строка после первой начинается с вертикальной черты.

В лексических определениях (как в примере выше) используются ещё два соглашения: два буквальных символа, разделённые тремя точками, обозначают выбор любого отдельного символа из заданного диапазона ASCII включительно. Выражение в угловых скобках (<...>) содержит неформальное описание определяемого символа; например, при необходимости так можно описать понятие «управляющий символ».

Несмотря на то что используемая нотация почти одинакова, значения лексических и синтаксических определений существенно различаются: лексическое определение применяется к отдельным символам исходного ввода, тогда как синтаксическое определение — к потоку токенов, сформированному в ходе лексического анализа. Все применения BNF в следующей главе («Лексический анализ») представляют собой лексические определения; в последующих главах используются синтаксические определения.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/reference/introduction.html

Spec-Zone.ru

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