1. Einführung
*************

Dieses Referenzhandbuch beschreibt die Programmiersprache Python. Es
ist nicht als Tutorial gedacht.

Während ich versuche, so präzise wie möglich zu sein, habe ich mich
dafür entschieden, für alles außer der Syntax und der lexikalischen
Analyse einfaches Englisch statt formaler Spezifikationen zu
verwenden. Dies sollte das Dokument für den durchschnittlichen Leser
verständlicher machen, lässt jedoch Raum für Mehrdeutigkeiten. Wenn
Sie also vom Mars kämen und versuchten, Python allein anhand dieses
Dokuments neu zu implementieren, müssten Sie unter Umständen Dinge
erraten und würden am Ende wahrscheinlich eine ganz andere Sprache
implementieren. Wenn Sie hingegen Python verwenden und sich fragen,
wie die genauen Regeln für einen bestimmten Bereich der Sprache
lauten, sollten Sie diese hier definitiv finden können. Wenn Sie eine
formalere Definition der Sprache wünschen, könnten Sie vielleicht Ihre
Zeit opfern --- oder eine Klonmaschine erfinden :-).

Es ist gefährlich, einem Sprachreferenzdokument zu viele
Implementierungsdetails hinzuzufügen --- die Implementierung kann sich
ändern, und andere Implementierungen derselben Sprache können anders
funktionieren. Andererseits ist CPython die am weitesten verbreitete
Python-Implementierung (obwohl alternative Implementierungen weiter an
Unterstützung gewinnen), und ihre speziellen Eigenheiten sind es
manchmal wert, erwähnt zu werden, insbesondere dort, wo die
Implementierung zusätzliche Einschränkungen mit sich bringt. Daher
finden sich im gesamten Text verstreut kurze
„Implementierungshinweise“.

Jede Python-Implementierung bringt eine Reihe von eingebauten und
Standard-Modulen mit. Diese sind in The Python standard library
dokumentiert. Einige wenige eingebaute Module werden erwähnt, wenn sie
in wesentlicher Weise mit der Sprachdefinition interagieren.


1.1. Alternative Implementierungen
==================================

Obwohl es eine Python-Implementierung gibt, die bei weitem am
beliebtesten ist, gibt es einige alternative Implementierungen, die
für verschiedene Zielgruppen von besonderem Interesse sind.

Zu den bekannten Implementierungen gehören:

CPython
   Dies ist die ursprüngliche und am meisten gepflegte Implementierung
   von Python, geschrieben in C. Neue Sprachmerkmale erscheinen hier
   in der Regel zuerst.

Jython
   Python implementiert in Java. Diese Implementierung kann als
   Skriptsprache für Java-Anwendungen verwendet werden oder zur
   Erstellung von Anwendungen unter Verwendung der Java-
   Klassenbibliotheken dienen. Sie wird auch häufig verwendet, um
   Tests für Java-Bibliotheken zu schreiben. Weitere Informationen
   sind auf der Jython-Website zu finden.

Python for .NET
   Diese Implementierung verwendet tatsächlich die CPython-
   Implementierung, ist jedoch eine verwaltete .NET-Anwendung und
   stellt .NET-Bibliotheken zur Verfügung. Sie wurde von Brian Lloyd
   entwickelt. Weitere Informationen finden Sie auf der Python for
   .NET-Startseite.

IronPython
   Ein alternatives Python für .NET. Im Gegensatz zu Python.NET ist
   dies eine vollständige Python-Implementierung, die IL generiert und
   Python-Code direkt in .NET-Assemblies kompiliert. Sie wurde von Jim
   Hugunin, dem ursprünglichen Schöpfer von Jython, entwickelt.
   Weitere Informationen finden Sie auf der IronPython-Website.

PyPy
   Eine vollständig in Python geschriebene Implementierung von Python.
   Sie unterstützt verschiedene fortgeschrittene Funktionen, die in
   anderen Implementierungen nicht zu finden sind, wie etwa Stackless-
   Unterstützung und einen Just-in-Time-Compiler. Eines der Ziele des
   Projekts ist es, zum Experimentieren mit der Sprache selbst
   anzuregen, indem es einfacher gemacht wird, den Interpreter
   anzupassen (da er in Python geschrieben ist). Weitere Informationen
   sind auf der Startseite des PyPy-Projekts verfügbar.

Jede dieser Implementierungen weicht in irgendeiner Weise von der in
diesem Handbuch dokumentierten Sprache ab oder führt spezifische
Informationen über das hinaus ein, was in der Standard-Python-
Dokumentation behandelt wird. Bitte ziehen Sie die
implementierungsspezifische Dokumentation zurate, um zu erfahren, was
Sie sonst noch über die von Ihnen verwendete Implementierung wissen
müssen.


1.2. Notation
=============

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.
