Inhaltsverzeichnis
1 Entwicklungsgeschichte
2 Ziele
3 Datentypen und Strukturen
3.1 Sammeltypen
3.2 Objektsystem
4 Syntax
4.1 Strukturierung durch Einr�cken
4.2 Funktionales Programmieren
4.3 Ausnahmebehandlung
5 Standardbibliothek
6 Grafische Benutzeroberfl�chen (GUI)
6.1 Beispiel zum Tkinter-Modul
6.2 Beispiel zum Turtle-Grafik-Modul
6.2.1 Weitere Grafiken
7 Beispiel
8 Interaktive Benutzung
9 Implementierungen
10 Entwicklungsumgebung
11 Paketverwaltung
12 Verbreitung und Einsatz
13 Ende von Python 2
14 Kritik
15 Literatur
16 Weblinks
16.1 Tutorials
16.1.1 F�r Anf�nger
16.1.2 F�r Fortgeschrittene
16.1.3 F�r Kinder
17 Einzelnachweise
18 Siehe auch
Entwicklungsgeschichte
Der Name geht nicht (wie das Logo vermuten lie�e) auf die gleichnamige
Schlangengattung (Pythons) zur�ck, sondern bezog sich urspr�nglich auf die
englische Komikertruppe Monty Python. In der Dokumentation finden sich daher auch
einige Anspielungen auf Sketche aus dem Flying Circus.[6] Trotzdem etablierte sich
die Assoziation zur Schlange, was sich unter anderem in der Programmiersprache
Cobra[7] sowie dem Python-Toolkit �Boa�[8] �u�ert. Die erste Vollversion erschien
im Januar 1994 unter der Bezeichnung Python 1.0. Gegen�ber fr�heren Versionen
wurden einige Konzepte der funktionalen Programmierung implementiert, die
allerdings sp�ter wieder aufgegeben wurden.[9] Von 1995 bis 2000 erschienen neue
Versionen, die fortlaufend als Python 1.1, 1.2 etc. bezeichnet wurden.
Python 2.0 erschien am 16. Oktober 2000. Neue Funktionen umfassten eine voll
funktionsf�hige Garbage Collection (automatische Speicherbereinigung) und die
Unterst�tzung f�r den Unicode-Zeichensatz.[10] In Version 2.6 wurde eine Hilfe
eingebaut, mit der angezeigt werden kann, welche Code-Sequenzen vom Nachfolger
Python 3 nicht mehr unterst�tzt werden und daher in darauf aufbauenden Versionen
nicht mehr lauff�hig sind.[11]
Python 3.0 (auch Python 3000) erschien am 3. Dezember 2008 nach l�ngerer
Entwicklungszeit. Es beinhaltet einige tiefgreifende �nderungen an der Sprache,
etwa das Entfernen von Redundanzen bei Befehlss�tzen und veralteten Konstrukten. Da
Python 3.0 hierdurch teilweise inkompatibel zu fr�heren Versionen ist,[12]
beschloss die Python Software Foundation, Python 2.7 parallel zu Python 3 bis Ende
2019 weiter mit neuen Versionen zu unterst�tzen (f�r Hinweise zu noch erscheinenden
2er-Versionen, dem Supportende und Hilfe zur Migration siehe Abschnitt Ende von
Python 2).
Ziele
Python wurde mit dem Ziel gr��ter Einfachheit und �bersichtlichkeit entworfen. Dies
wird vor allem durch zwei Ma�nahmen erreicht. Zum einen kommt die Sprache mit
relativ wenigen Schl�sselw�rtern aus.[14] Zum anderen ist die Syntax reduziert und
auf �bersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte
deutlich knapper formulieren als in anderen Sprachen.[15]
Van Rossum legte bei der Entwicklung gro�en Wert auf eine Standardbibliothek, die
�berschaubar und leicht erweiterbar ist. Dies war Ergebnis seiner schlechten
Erfahrung mit der Sprache ABC, in der das Gegenteil der Fall ist.[16]
Die Datentypen werden dynamisch verwaltet, eine statische Typpr�fung wie z. B. bei
C++ gibt es nicht. Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch
Referenzz�hlung.
Die wesentlichen Ziele und Regeln der Sprache wurden mit einer Reihe kurzer,
humorvoller Phrasen unter dem Titel The Zen of Python im Jahr 2004 herausgegeben.
[18]
Als kleines Easter Egg kann man sie mit dem Befehl
import this
anzeigen lassen.[19]
In Python ist alles ein Objekt: Klassen, Typen, Methoden, Module etc. Der Datentyp
ist jeweils an das Objekt (den Wert) gebunden und nicht an eine Variable, d. h.
Datentypen werden dynamisch vergeben, so wie bei Smalltalk oder Lisp � und nicht
wie bei Java.
Trotz der dynamischen Typverwaltung enth�lt Python eine gewisse Typpr�fung. Diese
ist strenger als bei Perl, aber weniger strikt als etwa bei Objective CAML.
Implizite Umwandlungen nach dem Duck-Typing-Prinzip sind unter anderem f�r
numerische Typen definiert, so dass man beispielsweise eine komplexe Zahl mit einer
langen Ganzzahl ohne explizite Typumwandlung multiplizieren kann.
Mit dem Format-Operator % gibt es eine implizite Umwandlung eines Objekts in eine
Zeichenkette. Der Operator == �berpr�ft zwei Objekte auf (Wert-)Gleichheit. Der
Operator is �berpr�ft die tats�chliche Identit�t zweier Objekte.[20]
Sammeltypen
Python besitzt mehrere Sammeltypen, darunter Listen, Tupel, Mengen (Sets) und
assoziative Arrays (Dictionaries). Listen, Tupel und Zeichenketten sind Folgen
(Sequenzen, Felder) und kennen fast alle die gleichen Methoden: �ber die Zeichen
einer Kette kann man ebenso iterieren wie �ber die Elemente einer Liste. Au�erdem
gibt es die unver�nderlichen Objekte, die nach ihrer Erzeugung nicht mehr ge�ndert
werden k�nnen. Listen sind z. B. erweiterbare Felder, wohingegen Tupel und
Zeichenketten eine feste L�nge haben und unver�nderlich sind.
Sets sind Mengen von Objekten und in CPython ab Version 2.4 im Standardsprachumfang
enthalten. Diese Datenstruktur kann beliebige (paarweise unterschiedliche) Objekte
aufnehmen und stellt Mengenoperationen wie beispielsweise Durchschnitt, Differenz
und Vereinigung zur Verf�gung.
Objektsystem
Das Typsystem von Python ist auf das Klassensystem abgestimmt. Obwohl die
eingebauten Datentypen genau genommen keine Klassen sind, k�nnen Klassen von einem
Typ erben. So kann man die Eigenschaften von Zeichenketten oder W�rterb�chern
erweitern � auch von Ganzzahlen. Python unterst�tzt Mehrfachvererbung.
Die Sprache unterst�tzt direkt den Umgang mit Typen und Klassen. Typen k�nnen
ausgelesen (ermittelt) und verglichen werden und verhalten sich wie Objekte �
tats�chlich sind die Typen (wie in Smalltalk) selbst ein Objekt. Die Attribute
eines Objektes k�nnen als W�rterbuch extrahiert werden.
Syntax
Eines der Entwurfsziele f�r Python war die gute Lesbarkeit des Quellcodes. Die
Anweisungen benutzen h�ufig englische Schl�sselw�rter, wo andere Sprachen Symbole
einsetzen. Dar�ber hinaus besitzt Python weniger syntaktische Konstruktionen als
viele andere strukturierte Sprachen, wie C, Perl oder Pascal:
zwei Schleifenformen
for zur Iteration �ber die Elemente einer Sequenz
while zur Wiederholung einer Schleife, solange ein logischer Ausdruck wahr ist.
Verzweigungen
if � elif � else f�r Verzweigungen
Beim letzten Punkt bieten andere Programmiersprachen zus�tzlich switch und/oder
goto. Diese wurden zugunsten der Lesbarkeit in Python weggelassen und m�ssen durch
if-Konstrukte oder andere Verzweigungsm�glichkeiten (Slices, W�rterb�cher)
abgebildet werden. Im Gegensatz zu vielen anderen Sprachen k�nnen for- und while-
Schleifen einen else-Zweig haben. Dieser wird nur ausgef�hrt, wenn die Schleife
vollst�ndig durchlaufen wurde und nicht mittels break abgebrochen wird.
Hierzu als Beispiel die Berechnung der Fakult�t einer Ganzzahl, einmal in C und
einmal in Python:
Fakult�tsfunktion in C:
int fakultaet(int x) {
if (x > 1)
return x * fakultaet(x - 1);
return 1;
}
Die gleiche Funktion in Python:
def fakultaet(x):
if x > 1:
return x * fakultaet(x - 1)
return 1
Es ist jedoch darauf zu achten, die Einr�ckungen im gesamten Programmtext gleich zu
gestalten. Die gemischte Verwendung von Leerzeichen und Tabulatorzeichen kann zu
Problemen f�hren, da der Python-Interpreter Tabulatoren im Abstand von acht
Leerzeichen annimmt. Je nach Konfiguration des Editors k�nnen Tabulatoren optisch
mit weniger als acht Leerzeichen dargestellt werden, was zu Syntaxfehlern oder
ungewollter Programmstrukturierung f�hren kann. Als vorbeugende Ma�nahme kann man
den Editor Tabulatorzeichen durch eine feste Anzahl von Leerzeichen ersetzen
lassen. Die Python-Distribution enth�lt in der Standardbibliothek das Modul
tabnanny, welches die Vermischung von Tabulator- und Leerzeichen zu erkennen und
beheben hilft.
Man kann die Fakult�tsfunktion aber auch wie in C einzeilig mit tern�rem Operator
formulieren:
Die Fakult�tsfunktion in C:
int fakultaet(int x) {
return x > 1 ? x * fakultaet(x - 1) : 1;
}
Die Fakult�tsfunktion in Python:
def fakultaet(x):
return x * fakultaet(x - 1) if x > 1 else 1
Funktionales Programmieren
Coconut[21] und andere Erweiterungen erleichtern das funktionale Programmieren in
Python, dar�ber hinaus l�sst sich dies auch mit dem herk�mmlichen Python
realisieren:
zahlen = [1, 2, 3, 4, 5]
zweierpotenzen = [2 ** n for n in zahlen]
Weil in Python Funktionen als Argumente auftreten d�rfen, kann man auch
ausgekl�geltere Konstruktionen ausdr�cken, wie den Continuation-Passing Style.
def add_and_print_maker(x):
def temp(y):
print("{} + {} = {}".format(x, y, x + y))
return temp
Damit ist auch Currying auf einfache Art m�glich, um generische Funktionsobjekte
auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel:
def stack():
l = []
def pop():
if not is_empty():
return l.pop()
def push(element):
l.append(element)
def is_empty():
return len(l) == 0
Ausnahmebehandlung
Python nutzt ausgiebig die Ausnahmebehandlung (englisch exception handling) als ein
Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass
es teilweise sogar m�glich ist, Syntaxfehler abzufangen und zur Laufzeit zu
behandeln.
Der Python-Ansatz legt den Einsatz von Ausnahmen nahe, wann immer eine
Fehlerbedingung entstehen k�nnte. N�tzlich ist dieses Prinzip beispielsweise bei
der Konstruktion robuster Eingabeaufforderungen:
while True:
num = input("Eine ganze Zahl eingeben: ")
try:
num = int(num)
except ValueError:
print("Eine _Zahl_, bitte!")
else:
break
Dieses Programmst�ck fragt den Benutzer so lange nach einer Zahl, bis dieser eine
Zeichenfolge eingibt, die sich per int() in eine Ganzzahl konvertieren l�sst. Durch
die Ausnahmebehandlung wird hier vermieden, dass eine Fehleingabe zu einem
Laufzeitfehler f�hrt, der das Programm zum Abbruch zwingt.
Ebenso kann auch das hier nicht ber�cksichtigte Interrupt-Signal (SIGINT, h�ufig
Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden
(except KeyboardInterrupt: �).
Standardbibliothek
Die m�chtige Standardbibliothek ist eine der gr��ten St�rken von Python, wodurch es
sich f�r viele Anwendungen eignet. Der �berwiegende Teil davon ist
plattformunabh�ngig, so dass auch gr��ere Python-Programme oft auf Unix, Windows,
macOS und anderen Plattformen ohne �nderung laufen. Die Module der
Standardbibliothek k�nnen mit in C oder Python selbst geschriebenen Modulen erg�nzt
werden.
Die Standardbibliothek ist besonders auf Internetanwendungen zugeschnitten, mit der
Unterst�tzung einer gro�en Anzahl von Standardformaten und -protokollen (wie MIME
und HTTP). Module zur Schaffung grafischer Benutzeroberfl�chen, zur Verbindung mit
relationalen Datenbanken und zur Manipulation regul�rer Ausdr�cke sind ebenfalls
enthalten.
Neben Tkinter wird auch ein Modul zum Zeichnen von Turtle-Grafiken mitgeliefert.
fenster = Tk()
fenster.geometry("200x100")
label = Label(fenster, text="Hallo, Welt!")
label.pack()
def befehl():
fenster.destroy()
speed(0)
reset()
x = -200
y = 200
while y != -200:
goto(x, y)
x = -x
y = - y
goto(x, y)
goto(0, 0)
y = -y
x = -x
y = y - 5
Bunter Kreis
Stern
Die Turtle zeichnet ein Quadrat
Beispiel
Als nicht triviales Beispiel sei hier der kompakte Sortieralgorithmus Quicksort
angegeben:
def quicksort(liste):
if len(liste) <= 1:
return liste
pivotelement = liste.pop()
links = [element for element in liste if element < pivotelement]
rechts = [element for element in liste if element >= pivotelement]
...
links, rechts = [], [] # leere Listen f�r links und rechts anlegen
pivotelement = liste.pop() # das letzte Element aus der Liste nehmen als
Referenz
Interaktive Benutzung
So wie Lisp, Ruby, Groovy und Perl unterst�tzt der Python-Interpreter auch einen
interaktiven Modus, in dem Ausdr�cke am Terminal eingegeben und die Ergebnisse
sofort betrachtet werden k�nnen. Das ist nicht nur f�r Neulinge angenehm, die die
Sprache lernen, sondern auch f�r erfahrene Programmierer: Code-St�ckchen k�nnen
interaktiv ausgiebig getestet werden, bevor man sie in ein geeignetes Programm
aufnimmt.
Implementierungen
Neben der Referenzimplementierung CPython gibt es einen in Java implementierten
Python-Interpreter namens Jython, mit dem die Bibliothek der Java-Laufzeitumgebung
f�r Python verf�gbar gemacht wird. Au�er den Interpretern existieren Compiler, die
Python-Code in eine andere Programmiersprache �bersetzen: Mit Cython kann Python-
Code in effiziente C-Erweiterungen �bersetzt oder externer C/C++-Code angebunden
werden. Ebenso existiert der Compiler IronPython f�r die .NET- bzw. Mono-Plattform.
Um Python als Skriptsprache f�r Programme in C++ zu nutzen, werden zumeist die
Boost-Python-Bibliothek oder (in neueren Projekten) Cython verwendet. Ein Python-
Parser f�r Parrot und ein in Python geschriebener Just-in-time-Compiler f�r Python,
PyPy, welcher von der EU gef�rdert wurde, sind ebenfalls in Entwicklung. Au�erdem
existiert ein Python-Interpreter f�r Mikrocontroller namens MicroPython.[22]
Entwicklungsumgebung
Neben IDLE, das oft mit Python installiert wird und haupts�chlich aus einer
Textumgebung und einer Shell besteht, wurden auch einige vollwertige
Entwicklungsumgebungen (IDEs) f�r Python entwickelt, beispielsweise Eric Python IDE
oder PyCharm. Weiterhin gibt es Plug-ins f�r gr��ere IDEs wie Eclipse, Visual
Studio und NetBeans. Texteditoren f�r Programmierer wie Vim und Emacs lassen sich
gegebenenfalls auch f�r Python anpassen.
Paketverwaltung
Python unterst�tzt die Erstellung von Paketen; dabei helfen distutils und
setuptools. Die Pakete werden auf PyPI, dem Python Package Index, gespeichert und
von dort zur Installation abgerufen. Als Paketmanager wird �blicherweise pip oder
auf alten Systemen auch easy_install eingesetzt. Paketversionen der Anaconda
(Python-Distribution) werden von der Paketverwaltung conda verwaltet.[23]
Kritik
Bei der Definition von Methoden muss der Parameter self, der der Instanz
entspricht, deren Methode aufgerufen wird, explizit als Parameter angegeben werden.
Dies wird oft als unelegant und nicht objektorientiert empfunden.[37] Es ist aber
n�tig, um bestimmte wichtige Konstrukte zu erm�glichen;[38] au�erdem entspricht es
dem Python-Grundsatz �Explicit is better than implicit�.[18]
Bis zur Version 3.0 wurde kritisiert, dass in einer Methodendefinition der Aufruf
der Basisklassenversion derselben Methode die explizite Angabe der Klasse und
Instanz erfordert. Dies wurde als Verletzung des DRY-Prinzips (�Don�t repeat
yourself�) gesehen, au�erdem behinderte es Umbenennungen. In Python 3.0 wurde
dieser Kritikpunkt behoben.[39]