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.
