1. Введение

Это справочное руководство описывает язык программирования Python. Его предназначение отличается от учебника.

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

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

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

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

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

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

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

Jython. Python, реализованный на Java. Эта реализация может быть использована в качестве скриптового языка для приложений Java, или может быть использована для создания приложений, использующих библиотеки классов Java. Также она часто используется для создания тестов для библиотек Java. Больше информации может быть найдено на вебсайте Jython.

Python для .NET. Эта реализация в действительности использует CPython, но управляется приложением .NET и делает доступными библиотеки .NET. Ее создал Brian Lloyd. Для большей информации см. домашнюю страницу Python для .NET.

IronPython. Альтернативный Питон для .NET. В отличие от Python.NET, это законченная реализация Python, которая генерирует IL и компилирует код Python прямо в сборки .NET. Была создана Jim Hugunin, первоначальным создателем 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 в следующей главе ("Лексический анализ") являются лексическими определениями; использование в последующих главах - синтаксические определения.

Создано