Sie sind auf Seite 1von 10

Python (['p?a??n?], ['p?a???n], auf Deutsch auch ['p?y?t?

n]) ist eine universelle,


�blicherweise interpretierte h�here Programmiersprache.[4] Sie hat den Anspruch,
einen gut lesbaren, knappen Programmierstil zu f�rdern.[5] So werden beispielsweise
Bl�cke nicht durch geschweifte Klammern, sondern durch Einr�ckungen strukturiert.
Wegen seiner klaren und �bersichtlichen Syntax gilt Python als einfach zu erlernen.

Python unterst�tzt mehrere Programmierparadigmen, z. B. die objektorientierte, die


aspektorientierte und die funktionale Programmierung. Ferner bietet es eine
dynamische Typisierung. Wie viele dynamische Sprachen wird Python oft als
Skriptsprache genutzt. Die Sprache weist ein offenes, gemeinschaftsbasiertes
Entwicklungsmodell auf, das durch die gemeinn�tzige Python Software Foundation
gest�tzt wird, die de facto die Definition der Sprache in der Referenzumsetzung
CPython pflegt.

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

Guido van Rossum, der Entwickler von Python


Die Sprache wurde Anfang der 1990er Jahre von Guido van Rossum am Centrum Wiskunde
& Informatica in Amsterdam als Nachfolger f�r die Programmier-Lehrsprache ABC
entwickelt und war urspr�nglich f�r das verteilte Betriebssystem Amoeba gedacht.

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

Am 27. Juni 2018 wurde die neueste Version 3.7 ver�ffentlicht.[13]

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]

Durch dieses Konzept wurde es auch erm�glicht, Python-Programme in anderen Sprachen


als Module einzubetten, um z. B. Schw�chen von Python zu umgehen. Beispielsweise
k�nnen f�r zeitkritische Teile Routinen in maschinenn�heren Sprachen wie z. B. C
aufgerufen werden.[17] Umgekehrt lassen sich mit Python Module und Plug-ins f�r
andere Programme schreiben, die die entsprechende Unterst�tzung bieten. Dies ist z.
B. bei Blender, Cinema 4D, GIMP, Maya, OpenOffice bzw. LibreOffice, PyMOL, SPSS,
QGIS oder KiCad der Fall.

Python ist eine Multiparadigmensprache. Das bedeutet, Python zwingt den


Programmierer nicht zu einem einzigen Programmierstil, sondern erlaubt, das f�r die
jeweilige Aufgabe am besten geeignete Paradigma zu w�hlen. Objektorientierte und
strukturierte Programmierung werden vollst�ndig unterst�tzt, funktionale und
aspektorientierte Programmierung werden durch einzelne Elemente der Sprache
unterst�tzt.

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]

Datentypen und Strukturen

Datentypen und Strukturen


Python besitzt eine gr��ere Anzahl von grundlegenden Datentypen. Neben der
herk�mmlichen Arithmetik unterst�tzt es transparent auch beliebig gro�e Ganzzahlen
und komplexe Zahlen.

Die �blichen Zeichenkettenoperationen werden unterst�tzt. Zeichenketten sind in


Python allerdings unver�nderliche Objekte (wie auch in Java). Daher geben
Operationen, die eine Zeichenkette ver�ndern sollen � wie z. B. durch Ersetzen von
Zeichen � immer eine neue Zeichenkette zur�ck.

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.

Der Zweck solcher Unver�nderlichkeit h�ngt z. B. mit den W�rterb�chern zusammen,


einem Datentyp, der auch als assoziatives Array bezeichnet wird. Um die
Datenkonsistenz zu sichern, m�ssen die Schl�ssel eines W�rterbuches vom Typ
�unver�nderlich� sein. Die ins W�rterbuch eingetragenen Werte k�nnen dagegen von
beliebigem Typ sein.

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.

Strukturierung durch Einr�cken


Python benutzt wie Miranda und Haskell Einr�ckungen als Strukturierungselement.
Diese Idee wurde erstmals von Peter J. Landin vorgeschlagen und von ihm off-side
rule (�Abseitsregel�) genannt. In den meisten anderen Programmiersprachen werden
Bl�cke durch Klammern oder Schl�sselw�rter markiert, w�hrend unterschiedlich gro�e
Leerr�ume au�erhalb von Zeichenketten keine spezielle Semantik tragen. Bei diesen
Sprachen ist die Einr�ckung zur optischen Hervorhebung eines Blockes zwar erlaubt
und in der Regel auch erw�nscht, aber nicht vorgeschrieben. F�r Programmierneulinge
wird der Zwang zu lesbarem Stil aber als Vorteil gesehen.

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:

Ausdrucksstarke syntaktische Elemente zur funktionalen Programmierung vereinfachen


das Arbeiten mit Listen und anderen Sammeltypen. Eine solche Vereinfachung ist die
Listennotation, die aus der funktionalen Programmiersprache Haskell stammt; hier
bei der Berechnung der ersten f�nf Zweierpotenzen:

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.

Pythons Schl�sselwort lambda k�nnte manche Anh�nger der funktionalen Programmierung


fehlleiten. Solche lambda-Bl�cke in Python k�nnen nur Ausdr�cke enthalten, aber
keine Anweisungen. Damit werden solche Anweisungen generell nicht verwendet, um
eine Funktion zur�ckzugeben. Die �bliche Vorgehensweise ist stattdessen, den Namen
einer lokalen Funktion zur�ckzugeben. Das folgende Beispiel zeigt dies anhand einer
einfachen Funktion nach den Ideen von Haskell Brooks Curry:

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 curry(func, known_argument):


return lambda unknown_argument: func(unknown_argument, known_argument)
Wird die curry-Funktion aufgerufen, erwartet diese eine Funktion mit zwei
notwendigen Parametern sowie die Parameterbelegung f�r den zweiten Parameter dieser
Funktion. Der R�ckgabewert von curry ist eine Funktion, die das Gleiche tut wie
func, aber nur noch einen Parameter ben�tigt.

Anonyme Namensr�ume (sog. Closures) sind mit den o. g. Mechanismen in Python


ebenfalls einfach m�glich. Ein simples Beispiel f�r einen Stack, intern durch eine
Liste repr�sentiert:

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

return pop, push, is_empty

pop, push, is_empty = stack()


Auf diese Weise erh�lt man die drei Funktionsobjekte pop, push, is_empty, um den
Stack zu modifizieren bzw. auf enthaltene Elemente zu pr�fen, ohne l direkt
modifizieren zu k�nnen.

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.

Ausnahmen haben einige Vorteile gegen�ber anderen beim Programmieren �blichen


Verfahren der Fehlerbehandlung (wie z. B. Fehler-R�ckgabewerte und globale
Statusvariablen). Sie sind Thread-sicher und k�nnen leicht bis in die h�chste
Programmebene weitergegeben oder an einer beliebigen anderen Ebene der
Funktionsaufruffolge behandelt werden. Der korrekte Einsatz von
Ausnahmebehandlungen beim Zugriff auf dynamische Ressourcen erleichtert es zudem,
bestimmte auf Race Conditions basierende Sicherheitsl�cken zu vermeiden, die
entstehen k�nnen, wenn Zugriffe auf bereits veralteten Statusabfragen basieren.

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.

Grafische Benutzeroberfl�chen (GUI)


Mit Hilfe des mitgelieferten Moduls Tkinter kann in Python (wie in Perl und Tcl)
schnell eine grafische Benutzeroberfl�che (GUI) mit Tk erzeugt werden. Es gibt
dar�ber hinaus eine Vielzahl von weiteren Wrappern von anderen Anbietern. Sie
stellen Anbindungen (englisch language bindings) zu GUI-Toolkits wie z. B. PyGTK,
PyQt, wxPython, PyObjC und PyFLTK zur Verf�gung.

Neben Tkinter wird auch ein Modul zum Zeichnen von Turtle-Grafiken mitgeliefert.

Beispiel zum Tkinter-Modul


import tkinter

fenster = Tk()
fenster.geometry("200x100")
label = Label(fenster, text="Hallo, Welt!")
label.pack()

def befehl():
fenster.destroy()

button = Button(fenster, text="OK", command=befehl)


button.pack()

Beispiel f�r ein einfaches Tkinter-Fenster


Beispiel zum Turtle-Grafik-Modul
import turtle

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

Ergebnis des angegebenen Programmiercodes


Weitere Grafiken

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]

return quicksort(links) + [pivotelement] + quicksort(rechts)


Hier erm�glicht insbesondere die Listennotation f�r die Variablen links und rechts
eine kompakte Darstellung. Zum Vergleich eine iterative Formulierung dieser zwei
Zeilen:

...
links, rechts = [], [] # leere Listen f�r links und rechts anlegen
pivotelement = liste.pop() # das letzte Element aus der Liste nehmen als
Referenz

for element in liste: # die restlichen Elemente der Liste durchlaufen


...
if element < pivotelement: # ... und mit dem Pivot-Element vergleichen
links.append(element) # wenn kleiner, dann an linke Liste anh�ngen
else:
rechts.append(element) # ansonsten, wenn nicht kleiner, dann an rechte
Liste anh�ngen
...
Dies ist nur ein Beispiel f�r die gesparte Schreibarbeit durch die Listennotation.
Tats�chlich ist in diesem Fall die iterative Formulierung die schnellere, da pro
Durchgang nur einmal �ber das Feld �liste� iteriert wird und nicht zweimal wie in
der Listennotation.

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.

Dar�ber hinaus steht mit Python Shell ein Kommandozeileninterpreter f�r


verschiedene unixoide Computer-Betriebssysteme zur Verf�gung, der neben klassischen
Unix-Shellkommandos auch direkte Eingaben in Python-Form verarbeiten kann. IPython
ist eine popul�re interaktive Python-Shell mit stark erweiterter Funktionalit�t.

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.

F�r die verschiedenen GUI-Toolkits, wie z. B. Tkinter (GUI-Builder), WxPython


(wxGlade), PyQt (Qt Designer), PySide, PyGTK (Glade), Kivy oder PyFLTK gibt es
teils eigene Editoren, mit denen sich grafische Benutzeroberfl�chen auf
vergleichsweise einfache Art aufbauen lassen.

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]

Verbreitung und Einsatz


Python ist f�r die meisten g�ngigen Betriebssysteme frei erh�ltlich und bei den
meisten Linux-Distributionen im Standardumfang enthalten. Um Python in Webserver
einzubinden, wird Webserver-umgreifend WSGI verwendet, welches die Nachteile von
CGI umgeht. WSGI stellt eine universelle Schnittstelle zwischen Webserver und
Python(-Framework) zur Verf�gung.

Eine Reihe von Web-Application-Frameworks nutzt Python, darunter Django, Pylons,


SQLAlchemy, TurboGears, web2py, Flask und Zope. Ferner gibt es einen Python-
Interpreter f�r das Symbian-Betriebssystem, so dass Python auf verschiedenen
Mobiltelefonen verf�gbar ist. In der Version 2.5.1 ist Python ein Bestandteil von
AmigaOS 4.0. Au�erdem basieren mehrere bekannte kommerzielle Projekte, etwa Google
und YouTube, in Teilen auf Python.[24] Auch in der Spieleindustrie findet die
Sprache bisweilen Einsatz, etwa in EVE Online, World in Conflict und Civilization
IV.

Im Rahmen des Projektes 100-Dollar-Laptop wird Python als Standardsprache der


Benutzeroberfl�che verwendet. Da der 100-Dollar-Rechner f�r die Schulausbildung von
Kindern konzipiert ist, soll bei Benutzung der daf�r gestalteten grafischen
Benutzeroberfl�che �Sugar� auf Knopfdruck der gerade laufende Python-Quellcode
angezeigt werden.[25] Damit soll Kindern die M�glichkeit gegeben werden, die
dahinter liegende Informationstechnik real zu erleben und nach Belieben �hinter die
Kulissen� zu schauen.

Der Einplatinen-Computer Raspberry Pi (Python Interpreter) sollte urspr�nglich mit


einem im ROM integrierten Python-Interpreter ausgeliefert werden.[26] Auch heute
ist Python eine der bevorzugtesten Sprachen f�r den Raspberry Pi. Sein Standard-
Betriebssystem Raspbian kommt mit einer gro�en Python-Bibliothek zur Ansteuerung
der Hardware.

In der Wissenschaftsgemeinde genie�t Python gro�e Verbreitung, haupts�chlich wegen


des einfachen Einstiegs in die Programmierung und der gro�en Auswahl
wissenschaftlicher Bibliotheken. Numerische Rechnungen und die visuelle
Aufbereitung der Ergebnisse in Graphen werden meist mit NumPy und der Matplotlib
erledigt. Anaconda und SciPy b�ndeln viele wissenschaftliche Python-Bibliotheken
und machen sie somit einfacher zug�nglich. Mit TensorFlow, Keras, Scikit-learn,
PyTorch u. a. gibt es gro�e Bibliotheken zur Forschung und Nutzung von maschinellem
Lernen und Deep Learning (K�nstliche Intelligenz).

Ende von Python 2


Die Unterst�tzung f�r Python 2 ist klar befristet: Letzte 2er-Version ist die
2.7.16 vom 4. M�rz 2019, ab dem 1. Januar 2020 wird Python 2 dann nicht mehr
unterst�tzt.[27] Es gibt aber vielf�ltige und umfangreiche Dokumentationen zum
Umstieg[28][29][30] und auch Tools, die bei der Migration helfen[31] oder es
erm�glichen, Code zu schreiben, der mit Python 2 und 3 funktioniert.[32][33][34]
[35][36]

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]

Ferner wird die mangelnde statische Typsicherheit der Programmiersprache


kritisiert.[40]

Auf Multiprozessor-Systemen behindert der sogenannte Global Interpreter Lock (GIL)


von CPython die Effizienz von Python-Anwendungen, die softwareseitiges
Multithreading benutzen. Diese Beschr�nkung existiert unter Jython oder IronPython
allerdings nicht. Bislang ist von offizieller Seite nicht geplant, den GIL zu
ersetzen. Stattdessen wird empfohlen, mehrere miteinander kommunizierende Prozesse
anstelle von Threads zu verwenden.[41][42]

In den vorherrschenden Implementationen ist die Ausf�hrungsgeschwindigkeit


niedriger als bei vielen kompilierbaren Sprachen,[43] aber �hnlich wie bei Perl,
[44] PHP,[45] Dart[46] und Ruby.[47] Das liegt zum Teil daran, dass bei der
Entwicklung von CPython der Klarheit des Codes gegen�ber der Geschwindigkeit
Vorrang einger�umt wird.[48] Man beruft sich dabei auf Autorit�ten wie Donald Knuth
und Tony Hoare, die von verfr�hter Optimierung abraten. Wenn
Geschwindigkeitsprobleme auftreten, die nicht durch Optimierung des Python-Codes
gel�st werden k�nnen,[49] werden stattdessen JIT-Compiler wie PyPy verwendet oder
zeitkritische Funktionen in maschinenn�here Sprachen wie C oder Cython ausgelagert.