Der Name geht nicht, wie das Logo vermuten lässt, auf die gleichnamige SchlangengattungPython zurück, sondern bezog sich ursprünglich auf die englische KomikergruppeMonty Python. In der Dokumentation finden sich daher auch einige Anspielungen auf Sketche aus demFlying Circus.[16] Trotzdem etablierte sich dieAssoziation zur Schlange, was sich unter anderem in der ProgrammierspracheCobra[17] sowie dem Python-Toolkit „Boa“[18] ä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.[19] 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ähigeGarbage Collection (automatische Speicherbereinigung) und die Unterstützung für denUnicode-Zeichensatz.[20]
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,[21] beschloss diePython 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 AbschnittEnde von Python 2).
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 wenigenSchlüsselwörtern aus.[49] Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen.[50]
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 SpracheABC, in der das Gegenteil der Fall ist.[51] 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 wieC implementierte Routinen aufgerufen werden.[52] Umgekehrt lassen sich mit Python Module undPlug-ins für andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist unter anderem beiBlender,Cinema 4D,GIMP,Maya,Nuke,OpenOffice bzw.LibreOffice,PyMOL,SPSS,QGIS oderKiCad 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 undstrukturierte 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 durchReferenzzählung.Datentypen werden dynamisch verwaltet, eine automatische statischeTypprüfung wie z. B. beiC++ 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.[53][54]
Python besitzt eine größere Anzahl von grundlegenden Datentypen. Neben der herkömmlichenArithmetik unterstützt es transparent auch beliebig große Ganzzahlen undkomplexe Zahlen.
Die üblichen Zeichenkettenoperationen werden unterstützt.Zeichenketten sind in Python allerdings unveränderliche Objekte (wie auch inJava). 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 (denWert) gebunden und nicht an eine Variable, d. h. Datentypen werden dynamisch vergeben, so wie beiSmalltalk oderLisp – und nicht wie bei Java.
Trotz der dynamischen Typverwaltung enthält Python eine gewisse Typprüfung. Diese ist strenger als beiPerl, aber weniger strikt als etwa beiObjective CAML.Implizite Umwandlungen nach demDuck-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 Operatoris überprüft die tatsächlicheIdentität zweier Objekte.[55]
Python besitzt mehrereSammeltypen, darunter Listen,Tupel,Mengen (Sets) undassoziative Arrays (Dictionaries). Listen, Tupel und Zeichenketten sindFolgen (Sequenzen,Felder) und kennen fast alle die gleichen Methoden: Über die Zeichen einer Kette kann man ebensoiterieren 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 denDictionaries zusammen, einem Datentyp, der auch alsassoziatives Array bezeichnet wird. Um die Datenkonsistenz zu sichern, müssen dieSchlüssel einesDictionary vom Typ „unveränderlich“ sein. Die insDictionary eingetragenenWerte 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 beispielsweiseDurchschnitt,Differenz undVereinigung zur Verfügung.
DasTypsystem von Python ist auf das Klassensystem abgestimmt. Obwohl die eingebauten Datentypen genau genommen keineKlassen sind, können Klassen von einem Typerben. So kann man die Eigenschaften von Zeichenketten oder Wörterbüchern erweitern – auch von Ganzzahlen. Python unterstütztMehrfachvererbung.
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.
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ürstrukturierte Programmierung besitzt Python die folgenden Elemente:
Schleifen (wiederholte Ausführung):
for …else zur Iteration über die Elemente einer Sequenz
while …else zur Wiederholung, solange ein Ausdruck den Boolean-WertTrue hat
try …except …else …finally für Ausnahmebehandlungen
with zum Ausführen eines Blocks mit einem Kontext-Manager
Im Gegensatz zu vielen anderen Sprachen könnenfor- undwhile-Schleifen einenelse-Zweig haben. Dieser wird nur ausgeführt, wenn die Schleife vollständig durchlaufen und nicht mittelsbreak,return oder einer Ausnahme abgebrochen wurde.
Python benutzt wieMiranda undHaskellEinrückungen als Strukturierungselement. Diese Idee wurde erstmals vonPeter J. Landin vorgeschlagen und von ihmoff-side rule („Abseitsregel“) genannt. In den meisten anderen Programmiersprachen werden Blöcke durch Klammern oder Schlüsselwörter markiert, während unterschiedlich großeLeerrä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 setztStil-Diskussionen ein Ende.[56]
Hierzu als Beispiel die Berechnung derFakultät einer Ganzzahl, einmal inC und einmal in Python:
Es ist jedoch darauf zu achten, die Einrückungen im gesamten Programmtext gleich zu gestalten. Die gemischte Verwendung von Leerzeichen undTabulatorzeichen 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 Modultabnanny, welches die Vermischung von Tabulator- und Leerzeichen zu erkennen und beheben hilft.
Man kann die Fakultätsfunktion aber auch wie in C einzeilig mitternärem Operator formulieren:
Coconut[57] 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:
Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie denContinuation-Passing Style.
Pythons Schlüsselwortlambda könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solchelambda-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 vonHaskell Brooks Curry:
Wird diecurry-Funktion aufgerufen, erwartet diese eine Funktion mit zwei notwendigen Parametern sowie die Parameterbelegung für den zweiten Parameter dieser Funktion. Der Rückgabewert voncurry ist eine Funktion, die das Gleiche tut wiefunc, 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 einenStack, intern durch eine Liste repräsentiert:
Auf diese Weise erhält man die drei Funktionsobjektepop,push,is_empty, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne dabei aufl direkt zuzugreifen.
Python nutzt ausgiebig dieAusnahmebehandlung (englischexception 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 sindThread-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 aufRace 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:
whileTrue:num=input("Eine ganze Zahl eingeben: ")try:num=int(num)exceptValueError:print("Eine _Zahl_, bitte!")else:break
Dieses Programmstück fragt den Benutzer so lange nach einer Zahl, bis dieser eine Zeichenfolge eingibt, die sich perint() in eine Ganzzahl konvertieren lässt. Durch die Ausnahmebehandlung wird hier vermieden, dass eine Fehleingabe zu einemLaufzeitfehler führt, der das Programm zum Abbruch zwingt.
Ebenso kann auch das hier nicht berücksichtigteInterrupt-Signal (SIGINT, häufig Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (except KeyboardInterrupt: …).
Die mächtigeStandardbibliothek 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 aufUnix,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 (wieMIME undHTTP). Module zur Schaffung grafischer Benutzeroberflächen, zur Verbindung mitrelationalen Datenbanken und zur Manipulationregulärer Ausdrücke sind ebenfalls enthalten.
Hier ermöglicht insbesondere die Listennotation für die Variablenlinks undrechts eine kompakte Darstellung. Zum Vergleich eine iterative Formulierung dieser zwei Zeilen:
...links,rechts=[],[]# leere Listen für links und rechts anlegenpivotelement=liste.pop()# das letzte Element aus der Liste nehmen als Referenzforelementinliste:# die restlichen Elemente der Liste durchlaufen ...ifelement<pivotelement:# ... und mit dem Pivot-Element vergleichenlinks.append(element)# wenn kleiner, dann an linke Liste anhängenelse: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.
So wieLisp,Ruby,Groovy undPerl unterstützt der Python-Interpreter auch eineninteraktiven 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 einKommandozeileninterpreter für verschiedeneunixoideComputer-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.
CPython ist dieoffizielle oderReferenzimplementierung der Programmiersprache Python und derenInterpreter.
Daneben gibt es einen inJava implementierten Python-Interpreter namensJython, mit dem die Bibliothek derJava-Laufzeitumgebung für Python verfügbar gemacht wird.
Compiler
Außer den oben genannten Interpretern existierenCompiler, die Python-Code in eine andere Programmiersprache übersetzen.
MitCython kann Python-Code in effiziente C-Erweiterungen übersetzt oder externer C++- oder C-Code angebunden werden.
Um Python als Skriptsprache für Programme inC++ zu nutzen, werden zumeist dieBoost-Python-Bibliothek oder (in neueren Projekten) Cython verwendet.
Ein Python-Parser fürParrot und ein in Python geschriebenerJust-in-time-Compiler für Python,PyPy, welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung.
Auch die Python-VariantePyston verwendet Just-in-time-Compilierung und beschleunigt so die Ausführung von Python-Programmen.[58]
NebenIDLE, das oft mit Python installiert wird und hauptsächlich aus einer Textumgebung und einerShell besteht, wurden auch einige vollwertigeEntwicklungsumgebungen (IDEs) für Python entwickelt, beispielsweiseEric Python IDE,Spyder oderPyCharm. Weiterhin gibt esPlug-ins für größere IDEs wieEclipse,Visual Studio,IntelliJ IDEA[60] undNetBeans. Texteditoren für Programmierer wieVim undEmacs lassen sich auch für Python anpassen: Ein einfacher Python-Mode ist bereits integriert, und komfortablere Erweiterungen können hinzugefügt werden.
Python unterstützt die Erstellung von Paketen; dabei helfendistutils undsetuptools. Die Pakete werden auf PyPI, dem Python Package Index, gespeichert und von dort zur Installation abgerufen. Als Paketmanager wird üblicherweisepip oder auf alten Systemen aucheasy_install eingesetzt. Paketversionen derAnaconda (Python-Distribution) werden von derPaketverwaltungconda verwaltet.[61]
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-umgreifendWSGI verwendet, welches die Nachteile vonCGI umgeht. WSGI stellt eine universelle Schnittstelle zwischen Webserver und Python(-Framework) zur Verfügung.
Eine Reihe von Web-Application-Frameworks nutzt Python, darunterDjango, Pylons,SQLAlchemy, TurboGears,web2py,Flask undZope. Ferner gibt es einen Python-Interpreter für dasSymbian-Betriebssystem, so dass Python auf verschiedenenMobiltelefonen verfügbar ist. In der Version 2.5.1 ist Python ein Bestandteil vonAmigaOS 4.0.
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.[63][64][65][66][67][68] Lehrbücher, die sich explizit an junge Menschen ohne Programmiererfahrung wenden, unterstützen und unterstreichen diese Entwicklung.[69]
Im Rahmen des Projektes100-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 gestaltetengrafischen Benutzeroberfläche „Sugar“ auf Knopfdruck der gerade laufende Python-Quellcode angezeigt werden.[70] 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-ComputerRaspberry Pi(Python Interpreter) sollte ursprünglich mit einem imROM integrierten Python-Interpreter ausgeliefert werden.[71] Auch heute ist Python eine der bevorzugtesten Sprachen für den Raspberry Pi. Sein Standard-BetriebssystemRaspberry 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-KursComputer Science Circles z. B. wird von der Universität Waterloo in Kanada bereitgestellt. Die deutsche Version wird betrieben von den deutschen Bundesweiten Informatikwettbewerben.[72] TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.[73]
In derWissenschaftsgemeinde 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 einesJupyter Notebooks genutzt.[74] Numerische Rechnungen und die visuelle Aufbereitung der Ergebnisse in Graphen werden meist mitNumPy und derMatplotlib erledigt.Anaconda undSciPy bündeln viele wissenschaftliche Python-Bibliotheken und machen sie somit einfacher zugänglich. MitTensorFlow,Keras,Scikit-learn,PyTorch u. a. gibt es große Bibliotheken zur Forschung und Nutzung vonmaschinellem Lernen undDeep Learning (Künstliche Intelligenz).
Die Unterstützung für Python 2 ist beendet. Die letzte 2er-Version war die 2.7.18 vom 20. April 2020;[75][76] seit diesem Datum wird Python 2 nicht mehr unterstützt.[77][78] Es gibt aber vielfältige und umfangreiche Dokumentationen zum Umstieg[79][80][81] und auch Tools, die bei der Migration helfen[82] oder es ermöglichen, Code zu schreiben, der mit Python 2 und 3 funktioniert.[83][84][85][86][87]
Bei der Definition von Methoden muss der Parameterself, der der Instanz entspricht, deren Methode aufgerufen wird, explizit als Parameter angegeben werden. Dies wird von Andrew Kuchling, Autor und langjähriger Python-Entwickler[88], als unelegant und nicht objektorientiert empfunden.[89] Python-Schöpfer van Rossum verweist hingegen darauf, dass es nötig sei, um bestimmte wichtige Konstrukte zu ermöglichen.[90] Einer der Python-Grundsätze lautet zudem „Explicit is better than implicit“.[91]
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.[92]
AufMultiprozessor-Systemen behindert der sogenannteGlobal Interpreter Lock (GIL) von CPython die Effizienz von Python-Anwendungen, diesoftwareseitiges Multithreading benutzen. Diese Beschränkung existiert unterJython oderIronPython 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.[93] Alternativ wird empfohlen, mehrere miteinander kommunizierende Prozesse anstelle von Threads zu verwenden.[94][95]
In den vorherrschenden Implementationen ist die Ausführungsgeschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,[96] aber ähnlich wie beiPerl,[97]PHP,[98]Dart[99] undRuby.[100] Das liegt zum Teil daran, dass bei der Entwicklung von CPython der Klarheit des Codes gegenüber der Geschwindigkeit Vorrang eingeräumt wird.[101] Man beruft sich dabei auf Autoritäten wieDonald Knuth undTony Hoare, die von verfrühter Optimierung abraten. Wenn Geschwindigkeitsprobleme auftreten, die nicht durch Optimierung des Python-Codes gelöst werden können,[102] werden stattdessenJIT-Compiler wiePyPy verwendet oder zeitkritische Funktionen in maschinennähere Sprachen wieC oderCython ausgelagert.
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.
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.
CultRepo: Python: The Documentary - An origin story aufYouTube, 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).
↑Guido van Rossum, Jukka Lehtosalo, Łukasz Langa: PEP 484 – Type Hints. Python Software Foundation, 29. September 2014, abgerufen am 18. Oktober 2020 (englisch).
↑Mark Lutz, David Ascher: Learning Python, 2nd Edition. In: Safari Books Online. 23. Dezember 2003; abgerufen im 1. Januar 1 (englisch).