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_letters 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.