1. Вступление¶
Это справочное руководство описывает язык программирования Python. Оно не предназначено в качестве учебного пособия.
Стараясь быть как можно более точным, я решил использовать английский язык, а не формальные спецификации для всего, за исключением синтаксического и лексического анализа. Это должно сделать документ более понятным для обычного читателя, но оставит место для неясностей. Следовательно, если бы вы пришли с Марса и попытались заново реализовать Python, основываясь только на этом документе, вам, возможно, пришлось бы гадать, и на самом деле вы, вероятно, в конечном итоге реализовали бы совсем другой язык. С другой стороны, если вы используете Python и вам интересно, каковы точные правила в той или иной области языка, вы определенно сможете найти их здесь. Если вы хотите увидеть более формальное определение языка, возможно, вы могли бы посвятить свое время - или изобрести машину для клонирования :-).
Опасно добавлять слишком много сведений о реализации в справочный документ по языку - реализация может измениться, и другие реализации того же языка могут работать по-разному. С другой стороны, CPython - это единственная реализация Python, которая широко используется (хотя альтернативные реализации продолжают получать поддержку), и ее особые особенности иногда заслуживают упоминания, особенно в тех случаях, когда реализация накладывает дополнительные ограничения. Поэтому вы найдете краткие «примечания к реализации», разбросанные по всему тексту.
Каждая реализация Python поставляется с рядом встроенных и стандартных модулей. Они описаны в Стандартная библиотека Python. Несколько встроенных модулей упоминаются, когда они существенным образом взаимодействуют с определением языка.
1.1. Альтернативные реализации¶
Хотя есть одна реализация Python, которая на сегодняшний день является самой популярной, есть несколько альтернативных реализаций, которые представляют особый интерес для разных аудиторий.
Известные реализации включают в себя:
- CPython
Это оригинальная и наиболее поддерживаемая реализация Python, написанная на C. Новые возможности языка обычно появляются здесь в первую очередь.
- Джитон
Python реализован в Java. Эта реализация может использоваться как язык сценариев для приложений Java или может использоваться для создания приложений с использованием библиотек классов Java. Он также часто используется для создания тестов для библиотек Java. Более подробную информацию можно найти по адресу the Jython website.
- Python для .NET
Эта реализация фактически использует реализацию CPython, но является управляемой.СЕТЕВОЕ приложение предоставляет доступ к библиотекам .NET. Оно было создано Брайаном Ллойдом. Дополнительные сведения см. в Python for .NET home page.
- Железный язык
Альтернативный Python для .NET. В отличие от Python.NET - это полная реализация на Python, которая генерирует IL и компилирует код на Python непосредственно в сборки .NET. Она была создана Джимом Хугунином, первоначальным создателем Jython. Дополнительные сведения см. в разделе the IronPython website.
- ПиПи
Реализация Python, полностью написанная на Python. Она поддерживает несколько расширенных функций, которых нет в других реализациях, таких как поддержка stackless и компилятор Just in Time. Одной из целей проекта является поощрение экспериментов с самим языком путем упрощения модификации интерпретатора (поскольку он написан на Python). Дополнительная информация доступна на странице the PyPy project’s home page.
Каждая из этих реализаций каким-то образом отличается от языка, описанного в данном руководстве, или содержит специфическую информацию, выходящую за рамки стандартной документации по Python. Пожалуйста, обратитесь к документации по конкретной реализации, чтобы определить, что еще вам нужно знать о конкретной реализации, которую вы используете.
1.2. Обозначение¶
В описаниях лексического анализа и синтаксиса используется модифицированная грамматическая запись Backus–Naur form (BNF). Здесь используется следующий стиль определения:
name ::=lc_letter
(lc_letter
| "_")* lc_letter ::= "a"..."z"
В первой строке говорится, что name
- это lc_letter
, за которым следует последовательность из нуля или более lc_letter
символов и подчеркиваний. Символом lc_letter
, в свою очередь, является любой из одиночных символов от 'a'
до 'z'
. (Это правило действительно применяется к именам, определенным в лексических и грамматических правилах в этом документе.)
Каждое правило начинается с имени (которое является именем, определенным правилом) и ::=
. Вертикальная черта (|
) используется для разделения альтернатив; это наименее обязательный оператор в данном обозначении. Звездочка (*
) означает ноль или более повторений предыдущего пункта; аналогично, плюс (+
) означает одно или более повторений, а фраза, заключенная в квадратные скобки ([ ]
), означает ноль или единицу вхождения (другими словами, прилагаемая фраза является необязательной). Операторы *
и +
связываются настолько точно, насколько это возможно; для группировки используются круглые скобки. Строки-литералы заключаются в кавычки. Пробел используется только для разделения токенов. Правила обычно содержатся в одной строке; правила с большим количеством альтернатив могут быть отформатированы по-разному, при этом каждая строка после первой начинается с вертикальной черты.
В лексических определениях (как в примере выше) используются еще два условных обозначения: два буквенных символа, разделенных тремя точками, означают выбор любого отдельного символа из заданного (включительно) диапазона символов ASCII. Фраза, заключенная в угловые скобки (<...>
), дает неформальное описание определенного символа; например, при необходимости ее можно использовать для описания понятия «управляющий символ».
Несмотря на то, что используемые обозначения почти одинаковы, существует большая разница между значением лексического и синтаксического определений: лексическое определение оперирует отдельными символами источника входных данных, в то время как синтаксическое определение оперирует потоком лексем, сгенерированных в результате лексического анализа. Все виды использования BNF в следующей главе («Лексический анализ») являются лексическими определениями; в последующих главах используются синтаксические определения.