# 1. Введение

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

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

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

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

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

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

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

CPython

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

Jython

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

Python для .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. Нотация

The descriptions of lexical analysis and syntax use a modified Backus–Naur form (BNF) grammar notation. This uses the following style of definition:

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

The first line says that a `name` is an `lc_letter` followed by a sequence of zero or more `lc_letter`s and underscores. An `lc_letter` in turn is any of the single characters `'a'` through `'z'`. (This rule is actually adhered to for the names defined in lexical and grammar rules in this document.)

Each rule begins with a name (which is the name defined by the rule) and `::=`. A vertical bar (`|`) is used to separate alternatives; it is the least binding operator in this notation. A star (`*`) means zero or more repetitions of the preceding item; likewise, a plus (`+`) means one or more repetitions, and a phrase enclosed in square brackets (`[ ]`) means zero or one occurrences (in other words, the enclosed phrase is optional). The `*` and `+` operators bind as tightly as possible; parentheses are used for grouping. Literal strings are enclosed in quotes. White space is only meaningful to separate tokens. Rules are normally contained on a single line; rules with many alternatives may be formatted alternatively with each line after the first beginning with a vertical bar.

In lexical definitions (as the example above), two more conventions are used: Two literal characters separated by three dots mean a choice of any single character in the given (inclusive) range of ASCII characters. A phrase between angular brackets (`<...>`) gives an informal description of the symbol defined; e.g., this could be used to describe the notion of „control character“ if needed.

Even though the notation used is almost the same, there is a big difference between the meaning of lexical and syntactic definitions: a lexical definition operates on the individual characters of the input source, while a syntax definition operates on the stream of tokens generated by the lexical analysis. All uses of BNF in the next chapter («Lexical Analysis») are lexical definitions; uses in subsequent chapters are syntactic definitions.