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 for .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–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/reference/introduction.html

Spec-Zone.ru

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