Python (Programmiersprache)
| Python | |
|---|---|
| colspan="2" class="notheme" style="text-align:center; background-color:#Vorlage:Standardfarbe;" | Logo | |
| Basisdaten | |
| Paradigmen: | multiparadigmatisch: objektorientiert, prozedural (imperativ), funktional, strukturiert, reflektiert |
| Erscheinungsjahr: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Designer: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Entwickler: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Aktuelle Version | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) (Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)) |
| Typisierung: | stark, dynamisch („Duck-Typing“) |
| Wichtige Implementierungen: | CPython, Jython, IronPython, PyPy |
| Beeinflusst von: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Beeinflusste: | Ruby, Cython |
| Betriebssystem: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Lizenz: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) | |
Python ([<templatestyles src="IPA/styles.css" />], [<templatestyles src="IPA/styles.css" />], auf Deutsch auch [<templatestyles src="IPA/styles.css" />]) ist eine universell nutzbare, üblicherweise interpretierte, höhere Programmiersprache.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig What is Python Good For?] In: General Python FAQ. Python Foundation, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 5. September 2008 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig What is Python? Executive Summary.] In: Python documentation. Python Foundation, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 21. März 2007 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> So werden beispielsweise Blöcke nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert.
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 die Definition der Sprache in der Referenzumsetzung CPython pflegt.
Entwicklungsgeschichte
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 lässt, auf die gleichnamige Schlangengattung Python zurück, sondern bezog sich ursprünglich auf die englische Komikergruppe Monty Python. In der Dokumentation finden sich daher auch einige Anspielungen auf Sketche aus dem Flying Circus.<ref>Offizielle Python FAQ, sowie Python Tutorial, Kapitel 1</ref> Trotzdem etablierte sich die Assoziation zur Schlange, was sich unter anderem in der Programmiersprache Cobra<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig The Cobra Programming Language.] In: cobra-language.com. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> sowie dem Python-Toolkit „Boa“<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Boa Constructor home.] In: boa-constructor.sourceforge.net. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> ä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.<ref>Guido van Rossum: Kommentar zur Entfernung einiger funktionaler Konzepte. Abgerufen am 11. August 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> 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.<ref>A. Kuchling, Moshe Zadka: Dokumentation Python 2.0. Python Software Foundation, abgerufen am 11. August 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>
Python 3.0 (auch Python 3000) erschien am 3. Dezember 2008 nach längerer Entwicklungszeit. Es beinhaltete 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 wurde,<ref>Guido van Rossum: Dokumentation Python 3.0. Python Software Foundation, 14. Februar 2009, abgerufen am 11. August 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> 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 zur letzten 2er-Version, zum Support-Ende und zur Migration siehe Abschnitt Ende von Python 2).
Versionen
| Legende: | Ältere Version; nicht mehr unterstützt | Ältere Version; noch unterstützt | Aktuelle Version | Aktuelle Vorabversion | Zukünftige Version |
|---|
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.<ref>2. Lexical analysis. Abgerufen am 13. Dezember 2024 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen.<ref></ref>
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.<ref>Bill Venners: Interview mit Guido van Rossum. Artima, 13. Januar 2003, abgerufen am 15. August 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Dieses Konzept ermöglicht, in Python Module aufzurufen, die in anderen Programmiersprachen geschrieben wurden, etwa um Schwächen von Python auszugleichen. Beispielsweise können für zeitkritische Teile in maschinennäheren Sprachen wie C implementierte Routinen aufgerufen werden.<ref>Verwendung fremdsprachiger Module. In: Python. Python Software Foundation, abgerufen am 8. August 2023 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Umgekehrt lassen sich mit Python Module und Plug-ins für andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist unter anderem bei Blender, Cinema 4D, GIMP, Maya, Nuke, 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 Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch Referenzzählung. Datentypen werden dynamisch verwaltet, eine automatische statische Typprüfung wie z. B. bei C++ gibt es nicht. Jedoch unterstützt Python ab Version 3.5 optionale Typ-Annotationen, um eine statische Typprüfung mithilfe externer Software, wie zum Beispiel Mypy, zu vereinfachen.<ref>Guido van Rossum, Ivan Levkivskyi: PEP 483 – The Theory of Type Hints. Python Software Foundation, 19. Dezember 2014, abgerufen am 18. Oktober 2020 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref><ref>Guido van Rossum, Jukka Lehtosalo, Łukasz Langa: PEP 484 – Type Hints. Python Software Foundation, 29. September 2014, abgerufen am 18. Oktober 2020 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>
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, sodass 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.<ref>Vorlage:Cite book/NameVorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Learning Python, 2nd Edition.] In: Safari Books Online. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>
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 Dictionaries zusammen, einem Datentyp, der auch als assoziatives Array bezeichnet wird. Um die Datenkonsistenz zu sichern, müssen die Schlüssel eines Dictionary vom Typ „unveränderlich“ sein. Die ins Dictionary 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 (z. B. or statt ||). Für strukturierte Programmierung besitzt Python die folgenden Elemente:
- Schleifen (wiederholte Ausführung):
for…elsezur Iteration über die Elemente einer Sequenzwhile…elsezur Wiederholung, solange ein Ausdruck den Boolean-WertTruehat
- Verzweigungen (bedingte Ausführung):
if…elif…elsefür bedingte Verzweigungenmatch…case…iffür strukturiertes Pattern Matching
- Exceptions (Ausführung im Fehlerfall):
try…except…else…finallyfür Ausnahmebehandlungenwithzum Ausführen eines Blocks mit einem Kontext-Manager
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 und nicht mittels break, return oder einer Ausnahme abgebrochen wurde.
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. Laut van Rossum verhindert Einrückung als Teil der Sprachsyntax Missverständnisse des Programmierers, spart Raum im Vergleich zu Einrückungskonventionen, die Klammern in eine eigene Zeile setzen und setzt Stil-Diskussionen ein Ende.<ref>Design and History FAQ — Python 3 documentation. Abgerufen am 7. Juli 2024.</ref>
Hierzu als Beispiel die Berechnung der Fakultät einer Ganzzahl, einmal in C und einmal in Python:
Fakultätsfunktion in C: <syntaxhighlight lang="c"> int factorial(int x) {
if (x <= 1) {
return 1;
}
return x * factorial(x - 1);
} </syntaxhighlight>
Die gleiche Funktion in Python: <syntaxhighlight lang="python"> def factorial(x):
if x <= 1:
return 1
return x * factorial(x - 1)
</syntaxhighlight>
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: <syntaxhighlight lang="c"> int factorial(int x) {
return x <= 1 ? 1 : x * factorial(x - 1);
} </syntaxhighlight>
Die Fakultätsfunktion in Python: <syntaxhighlight lang="python"> def factorial(x):
return 1 if x <= 1 else x * factorial(x - 1)
</syntaxhighlight>
Funktionales Programmieren
Coconut<ref>Coconut (Erweiterung zu Python)</ref> 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: <syntaxhighlight lang="python"> zahlen = [1, 2, 3, 4, 5] zweierpotenzen = [2 ** n for n in zahlen] </syntaxhighlight> 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:
<syntaxhighlight lang="python">
def add_and_print_maker(x):
def temp(y):
print(f'{x} + {y} = {x + y}')
return temp
</syntaxhighlight>
Damit ist auch Currying auf einfache Art möglich, um generische Funktionsobjekte auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel: <syntaxhighlight lang="python"> def curry(func, known_argument):
return lambda unknown_argument: func(unknown_argument, known_argument)
</syntaxhighlight>
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.
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: <syntaxhighlight lang="python"> 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() </syntaxhighlight>
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 dabei auf l direkt zuzugreifen.
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: <syntaxhighlight lang="python"> while True:
num = input("Eine ganze Zahl eingeben: ")
try:
num = int(num)
except ValueError:
print("Eine _Zahl_, bitte!")
else:
break
</syntaxhighlight>
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 ({{Modul:Vorlage:lang}} Modul:Vorlage:lang:103: attempt to index field 'wikibase' (a nil value)) 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
<syntaxhighlight lang="python"> from tkinter import *
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() fenster.mainloop() </syntaxhighlight>
Weitere Beispiele
-
Text-Widget
-
Label-Widget
-
Der Cäsar-Verschlüsseler (v1.1)
-
Flip a coin (v1.3)
Beispiel zum Turtle-Grafik-Modul
<syntaxhighlight lang="python"> import turtle from turtle import speed, reset, goto
reset() speed(0) turtle.x = -200 turtle.y = 200
while turtle.y != -200:
goto(turtle.x, turtle.y) turtle.x = - turtle.x turtle.y = - turtle.y goto(turtle.x, turtle.y) goto(0, 0) turtle.y = - turtle.y turtle.x = - turtle.x turtle.y -= 5
</syntaxhighlight>
Weitere Grafiken
-
Bunter Kreis
-
Stern
-
Die Turtle zeichnet ein Quadrat
Beispiel
Als nicht triviales Beispiel sei hier der kompakte Sortieralgorithmus Quicksort angegeben:
<syntaxhighlight lang="python"> 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)
</syntaxhighlight>
Hier ermöglicht insbesondere die Listennotation für die Variablen links und rechts eine kompakte Darstellung. Zum Vergleich eine iterative Formulierung dieser zwei Zeilen: <syntaxhighlight lang="python"> ...
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
... </syntaxhighlight>
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.
Skriptfehler: Ein solches Modul „Vorlage:Anker“ ist nicht vorhanden.Implementierungen
- Interpreter
CPython ist die offizielle oder Referenzimplementierung der Programmiersprache Python und deren Interpreter.
Daneben gibt es einen in Java implementierten Python-Interpreter namens Jython, mit dem die Bibliothek der Java-Laufzeitumgebung für Python verfügbar gemacht wird.
- Compiler
Außer den oben genannten Interpretern existieren Compiler, die Python-Code in eine andere Programmiersprache übersetzen.
Mit Cython kann Python-Code in effiziente C-Erweiterungen übersetzt oder externer C++- oder C-Code angebunden werden.
Ebenso existiert der Compiler IronPython für die .Net-Framework- 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.
Auch die Python-Variante Pyston verwendet Just-in-time-Compilierung und beschleunigt so die Ausführung von Python-Programmen.<ref>Pyston. Python Performance. Abgerufen am 18. September 2022.</ref>
Außerdem existiert ein Python-Interpreter für Mikrocontroller namens MicroPython.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig MicroPython – Python for microcontrollers.] In: micropython.org. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>
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, Spyder oder PyCharm. Weiterhin gibt es Plug-ins für größere IDEs wie Eclipse, Visual Studio, IntelliJ IDEA<ref>Python – IntelliJ IDEA. In: jetbrains.com. 8. März 2021, abgerufen am 14. Januar 2023 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> und NetBeans. Texteditoren für Programmierer wie Vim und Emacs lassen sich auch für Python anpassen: Ein einfacher Python-Mode ist bereits integriert, und komfortablere Erweiterungen können hinzugefügt werden.
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.<ref>Conda documentation. Abgerufen am 25. Februar 2016 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>
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.
Kommerzieller Einsatz
Bekannte kommerzielle Projekte, etwa Google Suche und YouTube, basieren in Teilen auf Python.<ref>Quotes about Python. Abgerufen am 25. Juni 2011.</ref> Auch in der Spieleindustrie findet die Sprache bisweilen Einsatz, etwa in EVE Online, World in Conflict und Civilization IV.
In der Lehre
Python wird gern in der Lehre eingesetzt, da Python auf der einen Seite einsteigerfreundlich ist, auf der anderen Seite aber auch leistungsfähig und mächtig genug, um theoretische Grundlagen der Programmierung zu vermitteln und um moderne Anwendungen bis hin zu komplexen Datenanalysen, grafischer Programmierung oder Datenbankanwendungen zu entwickeln.<ref>Computer Science Circles – ein kostenfreier Dienst des Centre for Education in Mathematics and Computing, University of Waterloo.</ref><ref>Programmieren lernen mit Python. App Camps gemeinnützige Unternehmergesellschaft, Hamburg</ref><ref>Programming for Data Science with Python, Udacity</ref><ref>Einstieg ins Programmieren mit Python. Web 2 Unterricht, 3. September 2017</ref><ref>Python – die Programmiersprache für imperative und objektorientierte Programmierung. Bildungsserver Berlin-Brandenburg</ref><ref>Programmieren mit Python. Bildungsserver Rheinland-Pfalz</ref> Lehrbücher, die sich explizit an junge Menschen ohne Programmiererfahrung wenden, unterstützen und unterstreichen diese Entwicklung.<ref>Man vergleiche z. B. Programmieren supereasy – Einfacher Einstieg in Scratch und Python. von Carol Vorderman und Jon Woodcock, Dorling Kindersley Verlag, oder Python 4 Kids von Gregor Lingl, Mitp Verlag</ref>
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.<ref>OLPC-Wiki: „Python für den 100-Dollar-Laptop“</ref> 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.<ref>Vorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Erstmals »Live on stage«: Farnell zeigt den Raspberry Pi Nachwuchs.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> Auch heute ist Python eine der bevorzugtesten Sprachen für den Raspberry Pi. Sein Standard-Betriebssystem Raspberry Pi OS kommt mit einer großen Python-Bibliothek zur Ansteuerung der Hardware.
Python wird weltweit in der Informatikausbildung an Schulen und Universitäten eingesetzt. So steht inzwischen eine Reihe von (kostenlosen) didaktisch konzipierten Online-Lernplattformen zu Python für Schule und Selbststudium ab dem 6. Schuljahr zur Verfügung – meist in mehreren Sprachen. Der Online-Kurs Computer Science Circles z. B. wird von der Universität Waterloo in Kanada bereitgestellt. Die deutsche Version wird betrieben von den deutschen Bundesweiten Informatikwettbewerben.<ref>Computer Science Circles | 01000011 01010011 01000011. Abgerufen am 19. November 2024 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.<ref><templatestyles src="Webarchiv/styles.css" />Flyer TigerJython – Programmierkonzepte mit Python ( vom 12. Juli 2021 im Internet Archive) (PDF; 468 kB) Pädagogischen Hochschule Bern</ref>
In der Wissenschaft
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. Oft wird Python hier innerhalb eines Jupyter Notebooks genutzt.<ref>Jupyter, Mathematica, and the Future of the Research Paper. paulromer.net, 13. April 2018, abgerufen am 12. Dezember 2019 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> 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 beendet. Die letzte 2er-Version war die 2.7.18 vom 20. April 2020;<ref>Benjamin Peterson: Python Insider: Python 2.7.18, the last release of Python 2. In: Python Insider. 20. April 2020, abgerufen am 12. Juli 2022 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref><ref>Silke Hahn: Programmiersprachen: Lang lebe Python 3 – finales Release von Python 2. In: heise online. 21. April 2020, abgerufen am 12. Juli 2022.</ref> seit diesem Datum wird Python 2 nicht mehr unterstützt.<ref>Python Software Foundation: Press Release 20-Dec-2019. Abgerufen am 12. Juli 2022 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref><ref>Golem.de: IT-News für Profis. Abgerufen am 12. Juli 2022.</ref> Es gibt aber vielfältige und umfangreiche Dokumentationen zum Umstieg<ref>Porting Python 2 Code to Python 3 — Python 3.7.13 documentation. Abgerufen am 12. Juli 2022.</ref><ref>The Conservative Python 3 Porting Guide — Conservative Python 3 Porting Guide 1.0 documentation. Abgerufen am 12. Juli 2022.</ref><ref>Lennart Regebro: Supporting Python 3 — Supporting Python 3: An in-depth guide. Abgerufen am 12. Juli 2022 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> und auch Tools, die bei der Migration helfen<ref>25.4. 2to3 – Automated Python 2 to 3 code translation — Python 2.7.18 documentation. Abgerufen am 12. Juli 2022.</ref> oder es ermöglichen, Code zu schreiben, der mit Python 2 und 3 funktioniert.<ref>six: pypi.python.org und <templatestyles src="Webarchiv/styles.css" />Archivierte Kopie ( vom 8. Januar 2019 im Internet Archive)</ref><ref>Python-Modernize — modernize 0.6.1 documentation. Abgerufen am 12. Juli 2022.</ref><ref>Easy, clean, reliable Python 2/3 compatibility — Python-Future documentation. Abgerufen am 12. Juli 2022.</ref><ref>Victor Stinner: sixer: Add Python 3 support to Python 2 applications using the six module. Abgerufen am 12. Juli 2022.</ref><ref>limodou: 2to6. 25. Juni 2019, abgerufen am 12. Juli 2022.</ref>
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 von Andrew Kuchling, Autor und langjähriger Python-Entwickler<ref>A. M. Kuchling. Abgerufen am 1. September 2020 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>, als unelegant und nicht objektorientiert empfunden.<ref name="KuchlingWarts"><templatestyles src="Webarchiv/styles.css" />amk.ca ( vom 2. Oktober 2003 im Internet Archive)</ref> Python-Schöpfer van Rossum verweist hingegen darauf, dass es nötig sei, um bestimmte wichtige Konstrukte zu ermöglichen.<ref>Guido van Rossum: Why explicit self has to stay</ref> Einer der Python-Grundsätze lautet zudem „Explicit is better than implicit“.<ref name="Zen" />
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.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig PEP 3135 – New Super.] In: Python.org. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>
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 nicht. Bislang war von offizieller Seite nicht geplant, den GIL zu ersetzen, beginnend mit Version 3.13 kann dieser nun aber mithilfe eines Flags deaktiviert werden.<ref>heise online: Python 3.13: Endlich effizienteres Multithreading ohne Global Interpreter Lock. 15. März 2024, abgerufen am 21. Mai 2024.</ref> Alternativ wird empfohlen, mehrere miteinander kommunizierende Prozesse anstelle von Threads zu verwenden.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Library and Extension FAQ — Python 3.7.0 documentation.] In: Python.org. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref><ref>Vorlage:Cite book/NameVorlage:Cite book/Name: [Internetquelle: archiv-url ungültig It isn’t Easy to Remove the GIL.] In: Artima.com. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref>
In den vorherrschenden Implementationen ist die Ausführungsgeschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,<ref name="shootout-c">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Python–C.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 25. Dezember 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> aber ähnlich wie bei Perl,<ref name="shootout-perl">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Python–Perl.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 25. Dezember 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> PHP,<ref name="shootout-php-1">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Benchmark-Vergleich Python–PHP.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 25. Dezember 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> Dart<ref name="shootout-php-2">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Benchmark-Vergleich Python–Dart.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 25. Dezember 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> und Ruby.<ref name="shootout-ruby">Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Benchmark-Vergleich Python–Ruby.] , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 25. Dezember 2015 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> Das liegt zum Teil daran, dass bei der Entwicklung von CPython der Klarheit des Codes gegenüber der Geschwindigkeit Vorrang eingeräumt wird.<ref>Python Culture. Archiviert vom Vorlage:IconExternal am 28. Dezember 2009; abgerufen am 23. Dezember 2009 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> 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,<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Python Patterns – An Optimization Anecdote.] In: Python.org. , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung</ref> werden stattdessen JIT-Compiler wie PyPy verwendet oder zeitkritische Funktionen in maschinennähere Sprachen wie C oder Cython ausgelagert.
Literatur
Für den Einstieg
- Allen B. Downey: Programmieren lernen mit Python. 2. Auflage. O’Reilly, Köln (u. a.) 2014, ISBN 978-3-95561-806-3, S. 297.
- Bernd Klein: Einführung in Python 3. Für Ein- und Umsteiger. 4., vollst. überarb. Auflage. Hanser, München 2021, ISBN 978-3-446-46379-0, S. 600 (Inhaltsverzeichnis).
- Thomas Theis: Einstieg in Python. Ideal für Programmieranfänger geeignet. 8. Auflage. Rheinwerk Computing, Bonn 2024, ISBN 978-3-367-10123-8, S. 484 (Inhaltsverzeichnis).
- Mark Lutz: Learning Python. 6. Auflage. O’Reilly, Sebastopol (u. a.) 2025, ISBN 978-1-09-817130-8, S. 1128.
- Hans Petter Langtangen: A Primer on Scientific Programming with Python. 5. Auflage. Springer, 2016, ISBN 978-3-662-49886-6
- Mark Pilgrim, Florian Wollenschein: Python 3 – Intensivkurs. 1. Auflage. Springer, 2010, ISBN 978-3-642-04376-5
(Deutsche Übersetzung von Dive Into Python 3 google-books) - Mark Pilgrim: Dive Into Python 3. 2. Auflage. Springer, 2009, ISBN 1-4302-2415-0 (Download verfügbar)
- John Paul Mueller: Python programmieren lernen für Dummies. 2. Auflage. Wiley, Weinheim 2018, ISBN 978-3-527-71490-2, S. 407 (bei der Deutschen Nationalbibliothek).
- Martina Glöde (Hrsg.): Programmieren supereasy. Einfacher Einstieg in Scratch und Python. Dorling Kindersley, München 2020, ISBN 978-3-8310-3961-6, S. 224.
- Warren D. Sande; Carter Sande: Hello World! Programmieren für Kids und andere Anfänger. 2., akt. u. erw. Auflage. Hanser, München 2014, ISBN 978-3-446-43806-4, S. 475.
- Michael Bonacina: Python 3 Programmieren für Einsteiger: Der leichte Weg zum Python-Experten, 2. Auflage. BMU Verlag, Landshut 2019, ISBN 978-3-96645-007-2.
Referenzen
- Michael Weigend: Python ge-packt. 8. Auflage. mitp, Frechen 2020, ISBN 978-3-7475-0194-8, S. 656.
- Johannes Ernesti; Peter Kaiser: Python 3. Das umfassende Handbuch. 7., aktualisierte Auflage. Rheinwerk, Bonn 2023, ISBN 978-3-8362-9129-3 (rheinwerk-verlag.de – OpenBook beim Verlag (5. Auflage)).
- Mark Lutz: Python. Kurz & gut. 5. Auflage. O’Reilly, Köln u. a. 2014, ISBN 978-3-95561-770-7, S. 270.
Weiterführendes
- Luciano Ramalho: Fluent Python. Clear, concise, and effective programming. 2. Auflage. O’Reilly, Sebastopol CA u. a. 2022, ISBN 978-1-4920-5635-5, S. 983.
- Gregor Lingl: Python für Kids. 4. Auflage. bhv, 2010, ISBN 3-8266-8673-X.
- Farid Hajji: Das Python-Praxisbuch. 1. Auflage. Addison-Wesley, 2008, ISBN 978-3-8273-2543-3.
- Hans P. Langtangen: Python Scripting for Computational Science. 3. Auflage. Springer, 2008, ISBN 3-540-43508-5.
- Michael Weigend: Objektorientierte Programmierung mit Python. mitp-Verlag, 1. Auflage 2006, ISBN 3-8266-0966-2.
- Felix Bittmann: Praxishandbuch Python 3. Konzepte der Programmierung verstehen und anwenden. 1. Auflage. Books on Demand, Norderstedt 2020, ISBN 978-3-7519-0058-4, S. 240 (Inhaltsverzeichnis).
Weblinks
- Offizielle Website (englisch)
- CultRepo: Python: The Documentary – An origin story auf YouTube, 28. August 2025 (Dokumentarfilm über die Ursprünge der Programmiersprache Python mit ausführlichen Interviews mit u. a. Guido van Rossum; Laufzeit: 84:05 min).
Tutorials
Für Anfänger
- Python Examples (englisch)
- Online-Kurse und Tutorials für Python 2 und 3. Python-Kurs.eu
- Online-Kurs. University of Waterloo (deutsch, englisch, französisch)
- Practical programming for total beginners. Automate the Boring Stuff with Python (englisch)
- Einstieg in Python, Michael Weigend (deutsch)
- Python: Grafische Benutzeroberflächen für Python-Skripte erstellen, Veikko Krypczyk (deutsch)
Für Fortgeschrittene
- PythonProgramming.net: Python-Tutorials für Data analysis, Machine learning & GUIs (englisch)
- PyData: Python-Vorträge und -Tutorials für Data analysis, Machine learning etc. (englisch)
- Awesome Python: Liste von Frameworks, Bibliotheken und Ressourcen, nach Themen gegliedert (englisch)
- Python 3 – Das umfassende Handbuch: Rheinwerk openbook zu Python 3 (deutsch)
Für Kinder
- Snake Wrangling for Kids – Learning to Program with Python von Jason R. Briggs, für Kinder ab acht Jahren (englisch)
- Schlangengerangel für Kinder – Programmieren Lernen für Kinder (PDF; 2,1 MB) für Kinder ab acht Jahren (deutsch)
Einzelnachweise
<references responsive> <ref name="Zen"> Tim Peters: The Zen of Python. Python Software Foundation, 19. August 2004, abgerufen am 12. August 2014 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)). </ref> </references>
- Seiten mit Skriptfehlern
- Wikipedia:Defekter Dateilink
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:Literatur/Interner Fehler
- Wikipedia:Gesprochener Artikel
- Wikipedia:Lesenswert
- Python (Programmiersprache)
- Skriptsprache
- Objektorientierte Programmiersprache
- Imperative Programmiersprache
- Funktionale Programmiersprache