1. Введение

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

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

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

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

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

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

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

CPython

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

Jython

Python, реализованный на языке Java. Эта реализация может быть использована в качестве языка сценариев для Java-приложений или для создания приложений с использованием библиотек классов Java. Он также часто используется для создания тестов для библиотек Java. Более подробную информацию можно найти на сайте the Jython website.

Python для .NET

Эта реализация фактически использует реализацию CPython, но является управляемым приложением .NET и делает доступными библиотеки .NET. Она была создана Брайаном Ллойдом. Для получения дополнительной информации смотрите Python for .NET home page.

IronPython

Альтернативный Python для .NET. В отличие от Python.NET, это полная реализация Python, которая генерирует IL и компилирует код Python непосредственно в сборки .NET. Он был создан Джимом Хугунином, оригинальным создателем Jython. Для получения дополнительной информации смотрите the IronPython website.

PyPy

Реализация Python, полностью написанная на Python. Она поддерживает несколько расширенных возможностей, не встречающихся в других реализациях, таких как поддержка stackless и компилятор Just in Time. Одной из целей проекта является поощрение экспериментов с самим языком путем упрощения модификации интерпретатора (поскольку он написан на Python). Дополнительная информация доступна на сайте the PyPy project’s home page.

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

1.2. Условные обозначения

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

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

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

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

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

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

Вернуться на верх