1. Введение

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

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

1.2. Примечание

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

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

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

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

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

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