Dies ist ein als lesenswert ausgezeichneter Artikel.

Python (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet vonCPython)
Zur Navigation springen Zur Suche springen
Python
Logo

Logo der Programmiersprache Python

Basisdaten
Paradigmen: multiparadigmatisch:objektorientiert,prozedural(imperativ),funktional,strukturiert,reflektiert
Erscheinungsjahr: 20. Februar 1991[1]
Designer: Guido van Rossum[2]
Entwickler: Python Software Foundation,Guido van Rossum[1]
AktuelleVersion 3.13.0[3][4][5](7. Oktober 2024)
Typisierung: stark,dynamisch(„Duck-Typing“)
WichtigeImplementierungen: CPython,Jython,IronPython,PyPy
Beeinflusst von: Algol 68[6],ABC[7],Modula-3[8],C[9],C++[8],Perl,Java[10],Lisp[11],Haskell[12],APL[13],CLU,Dylan,ICON,Standard ML[13]
Beeinflusste: Ruby,Cython
Betriebssystem: Plattformunabhängig[14]
Lizenz: Python Software Foundation License[15]
Python.org

Python([ˈpʰaɪθn̩], [ˈpʰaɪθɑn], auf Deutsch auch [ˈpʰyːtɔn]) ist eineuniversell nutzbare,üblicherweiseinterpretierte,höhere Programmiersprache.[16]Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern.[17]So werden beispielsweiseBlöckenicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert.

Python unterstützt mehrereProgrammierparadigmen,z. B. dieobjektorientierte,dieaspektorientierteund diefunktionaleProgrammierung. Ferner bietet es einedynamische Typisierung.Wie vieledynamische Sprachenwird Python oft alsSkriptsprachegenutzt. Die Sprache weist ein offenes, gemeinschaftsbasiertes Entwicklungsmodell auf, das durch die gemeinnützigePython Software Foundationgestützt wird, die die Definition der Sprache in der ReferenzumsetzungCPythonpflegt.

Entwicklungsgeschichte

[Bearbeiten|Quelltext bearbeiten]
Guido van Rossum,der Entwickler von Python

Die Sprache wurde Anfang der 1990er Jahre vonGuido van RossumamCentrum Wiskunde & InformaticainAmsterdamals Nachfolger für die Programmier-LehrspracheABCentwickelt und war ursprünglich für das verteilteBetriebssystemAmoebagedacht.

Der Name geht nicht, wie das Logo vermuten lässt, auf die gleichnamige SchlangengattungPythonzurü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.[18]Trotzdem etablierte sich dieAssoziationzur Schlange, was sich unter anderem in der ProgrammierspracheCobra[19]sowie dem Python-Toolkit „Boa “[20]ä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.[21]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.[22]

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,[23]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).

Version Patchversion Veröffentlichung Ende des vollen Supports Ende der Sicherheitskorrekturen
Ältere Version; nicht mehr unterstützt:0.9 0.9.9[24] 20. Feb. 1991 29. Juli 1993
Ältere Version; nicht mehr unterstützt:1.0 1.0.4[24] 26. Jan. 1994 15. Feb. 1994
Ältere Version; nicht mehr unterstützt:1.1 1.1.1[24] 11. Okt. 1994 10. Nov. 1994
Ältere Version; nicht mehr unterstützt:1.2 13. Apr. 1995[24] Unsupported
Ältere Version; nicht mehr unterstützt:1.3 13. Okt. 1995[24] Unsupported
Ältere Version; nicht mehr unterstützt:1.4 25. Okt. 1996[24] Unsupported
Ältere Version; nicht mehr unterstützt:1.5 1.5.2[25] 3. Jan. 1998 13. Apr. 1999
Ältere Version; nicht mehr unterstützt:1.6 1.6.1[25] 5. Sep. 2000[26] Sep. 2000
Ältere Version; nicht mehr unterstützt:2.0 2.0.1[27] 16. Okt. 2000[28] 22. Juni 2001
Ältere Version; nicht mehr unterstützt:2.1 2.1.3[27] 15. Apr. 2001[29] 9. Apr. 2002
Ältere Version; nicht mehr unterstützt:2.2 2.2.3[27] 21. Dez. 2001[30] 30. Mai 2003
Ältere Version; nicht mehr unterstützt:2.3 2.3.7[27] 29. Juni 2003[31] 11. März 2008
Ältere Version; nicht mehr unterstützt:2.4 2.4.6[27] 30. Nov. 2004[32] 19. Dez. 2008
Ältere Version; nicht mehr unterstützt:2.5 2.5.6[27] 19. Sep. 2006[33] 26. Mai 2011
Ältere Version; nicht mehr unterstützt:2.6 2.6.9[34] 1. Okt. 2008 24. Aug. 2010 29. Okt. 2013
Ältere Version; nicht mehr unterstützt:2.7 2.7.18[35] 3. Juli 2010 1. Jan. 2020 1. Jan. 2020
Ältere Version; nicht mehr unterstützt:3.0 3.0.1[27][34][36] 3. Dez. 2008 27. Juni 2009 27. Juni 2009
Ältere Version; nicht mehr unterstützt:3.1 3.1.5[37] 27. Juni 2009 12. Juni 2011 6. Apr. 2012
Ältere Version; nicht mehr unterstützt:3.2 3.2.6[38] 20. Feb. 2011 13. Mai 2013 20. Feb. 2016
Ältere Version; nicht mehr unterstützt:3.3 3.3.7[39] 29. Sep. 2012 8. März 2014 29. Sep. 2017
Ältere Version; nicht mehr unterstützt:3.4 3.4.10[40] 16. März 2014 9. Aug. 2017 18. März 2019
Ältere Version; nicht mehr unterstützt:3.5 3.5.10[41] 13. Sep. 2015 8. Aug. 2017 30. Sep. 2020
Ältere Version; nicht mehr unterstützt:3.6 3.6.15[42] 23. Dez. 2016 24. Dez. 2018 23. Dez. 2021
Ältere Version; nicht mehr unterstützt:3.7 3.7.17[43] 27. Juni 2018 27. Juni 2020 27. Juni 2023
Ältere Version; noch unterstützt:3.8 3.8.19[44] 14. Okt. 2019 3. Mai 2021 Okt. 2024
Ältere Version; noch unterstützt:3.9 3.9.19[45] 5. Okt. 2020 17. Mai 2022 Okt. 2025
Ältere Version; noch unterstützt:3.10 3.10.14[46] 4. Okt. 2021 Mai 2023 Okt. 2026
Ältere Version; noch unterstützt:3.11 3.11.9[47] 24. Okt. 2022 Mai 2024 Okt. 2027
Aktuelle Version:3.12 3.12.5[48] 2. Okt. 2023 Mai 2025 Okt. 2028
Zukünftige Version:3.13 [49] 1. Okt. 2024 Okt. 2026 Okt. 2029
Legende: Ältere Version; nicht mehr unterstützt Ältere Version; noch unterstützt Aktuelle Version Aktuelle Vorabversion Zukünftige Version

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örternaus.[50]Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen.[51]

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.[52]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 wieCimplementierte Routinen aufgerufen werden.[53]Umgekehrt lassen sich mit Python Module undPlug-insfür andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist unter anderem beiBlender,Cinema 4D,GIMP,Maya,OpenOfficebzw.LibreOffice,PyMOL,SPSS,QGISoderKiCadder 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 undstrukturierteProgrammierung 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. Datentypenwerden dynamisch verwaltet, eine automatische statischeTypprüfungwie 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.[54][55]

Datentypen und Strukturen

[Bearbeiten|Quelltext bearbeiten]
Datentypen und Strukturen

Python besitzt eine größere Anzahl von grundlegenden Datentypen. Neben der herkömmlichenArithmetikunterstützt es transparent auch beliebig große Ganzzahlen undkomplexe Zahlen.

Die üblichen Zeichenkettenoperationen werden unterstützt.Zeichenkettensind 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 beiSmalltalkoderLisp– 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ätzweier Objekte.[56]

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 ebensoiterierenwie ü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 denDictionarieszusammen, einem Datentyp, der auch alsassoziatives Arraybezeichnet wird. Um die Datenkonsistenz zu sichern, müssen dieSchlüsseleinesDictionaryvom Typ „unveränderlich “sein. Die insDictionaryeingetragenenWertekönnen dagegen von beliebigem Typ sein.

Setssind 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,DifferenzundVereinigungzur Verfügung.

DasTypsystemvon Python ist auf das Klassensystem abgestimmt. Obwohl die eingebauten Datentypen genau genommen keineKlassensind, 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.orstatt||). Fürstrukturierte Programmierungbesitzt Python die folgenden Elemente:

  • Schleifen (wiederholte Ausführung):
    • forelsezur Iteration über die Elemente einer Sequenz
    • whileelsezur Wiederholung, solange ein Ausdruck den Boolean-WertTruehat
  • Verzweigungen (bedingte Ausführung):
    • ifelifelsefür bedingte Verzweigungen
    • matchcaseiffür strukturiertesPattern Matching
  • Exceptions (Ausführung im Fehlerfall):
    • tryexceptelsefinallyfür Ausnahmebehandlungen
    • withzum 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,returnoder einer Ausnahme abgebrochen wurde.

Strukturierung durch Einrücken

[Bearbeiten|Quelltext bearbeiten]

Python benutzt wieMirandaundHaskellEinrückungenals Strukturierungselement. Diese Idee wurde erstmals vonPeter J. Landinvorgeschlagen 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äumeauß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.[57]

Hierzu als Beispiel die Berechnung derFakultäteiner Ganzzahl, einmal inCund einmal in Python:

Fakultätsfunktion in C:

intfactorial(intx){
if(x<=1){
return1;
}

returnx*factorial(x-1);
}

Die gleiche Funktion in Python:

deffactorial(x):
ifx<=1:
return1

returnx*factorial(x-1)

Es ist jedoch darauf zu achten, die Einrückungen im gesamten Programmtext gleich zu gestalten. Die gemischte Verwendung von Leerzeichen undTabulatorzeichenkann 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 Operatorformulieren:

Die Fakultätsfunktion in C:

intfactorial(intx){
returnx<=1?1:x*factorial(x-1);
}

Die Fakultätsfunktion in Python:

deffactorial(x):
return1ifx<=1elsex*factorial(x-1)

Funktionales Programmieren

[Bearbeiten|Quelltext bearbeiten]

Coconut[58]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**nforninzahlen]

Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie denContinuation-Passing Style.

Pythons Schlüsselwortlambdakö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:

defadd_and_print_maker(x):
deftemp(y):
print(f'{x}+{y}={x+y}')

returntemp

Damit ist auchCurryingauf einfache Art möglich, um generische Funktionsobjekte auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel:

defcurry(func,known_argument):
returnlambdaunknown_argument:func(unknown_argument,known_argument)

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 voncurryist eine Funktion, die das Gleiche tut wiefunc,aber nur noch einen Parameter benötigt.

Closuressind mit den o. g. Mechanismen in Python ebenfalls einfach möglich. Ein simples Beispiel für einenStack,intern durch eine Liste repräsentiert:

defstack():
l=[]

defpop():
ifnotis_empty():
returnl.pop()

defpush(element):
l.append(element)

defis_empty():
returnlen(l)==0

returnpop,push,is_empty

pop,push,is_empty=stack()

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 aufldirekt zuzugreifen.

Ausnahmebehandlung

[Bearbeiten|Quelltext bearbeiten]

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,Syntaxfehlerabzufangen 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 Conditionsbasierende 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 einemLaufzeitfehlerfü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:…).

Standardbibliothek

[Bearbeiten|Quelltext bearbeiten]

Die mächtigeStandardbibliothekist 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,macOSund 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 (wieMIMEundHTTP). Module zur Schaffung grafischer Benutzeroberflächen, zur Verbindung mitrelationalen Datenbankenund zur Manipulationregulärer Ausdrückesind ebenfalls enthalten.

Grafische Benutzeroberflächen (GUI)

[Bearbeiten|Quelltext bearbeiten]

Mit Hilfe des mitgelieferten ModulsTkinterkann in Python (wie in Perl undTcl) schnell einegrafische Benutzeroberfläche(GUI) mitTkerzeugt werden. Es gibt darüber hinaus eine Vielzahl von weiterenWrappernvon anderen Anbietern. Sie stellen Anbindungen (englischlanguage bindings) zuGUI-Toolkitswie z. B.PyGTK,PyQt,wxPython,PyObjCund PyFLTKzur Verfügung.

Neben Tkinter wird auch ein Modul zum Zeichnen vonTurtle-Grafikenmitgeliefert.

Beispiel zum Tkinter-Modul

[Bearbeiten|Quelltext bearbeiten]
Beispiel für ein einfaches Tkinter-Fenster
fromtkinterimport*

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

defbefehl():
fenster.destroy()

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

Weitere Beispiele

[Bearbeiten|Quelltext bearbeiten]

Beispiel zum Turtle-Grafik-Modul

[Bearbeiten|Quelltext bearbeiten]
Ergebnis des angegebenen Quellcodes
importturtle
fromturtleimportspeed,reset,goto

reset()
speed(0)
turtle.x=-200
turtle.y=200

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

Als nicht triviales Beispiel sei hier der kompakte SortieralgorithmusQuicksortangegeben:

defquicksort(liste):
iflen(liste)<=1:
returnliste

pivotelement=liste.pop()
links=[elementforelementinlisteifelement<pivotelement]
rechts=[elementforelementinlisteifelement>=pivotelement]

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

Hier ermöglicht insbesondere die Listennotation für die Variablenlinksundrechtseine 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

forelementinliste:# die restlichen Elemente der Liste durchlaufen...
ifelement<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

[Bearbeiten|Quelltext bearbeiten]

So wieLisp,Ruby,GroovyundPerlunterstü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 einKommandozeileninterpreterfür verschiedeneunixoideComputer-Betriebssystemezur Verfügung, der neben klassischen Unix-Shellkommandosauch direkte Eingaben in Python-Form verarbeiten kann.IPythonist eine populäre interaktive Python-Shell mit stark erweiterter Funktionalität.

Implementierungen

[Bearbeiten|Quelltext bearbeiten]
Interpreter

CPython ist dieoffizielleoderReferenzimplementierungder Programmiersprache Python und derenInterpreter.

Daneben gibt es einen inJavaimplementierten Python-Interpreter namensJython,mit dem die Bibliothek derJava-Laufzeitumgebungfür Python verfügbar gemacht wird.

Compiler

Außer den oben genannten Interpretern existierenCompiler,die Python-Code in eine andere Programmiersprache übersetzen.

MitCythonkann Python-Code in effiziente C-Erweiterungen übersetzt oder externer C++- oder C-Code angebunden werden.

Ebenso existiert der CompilerIronPythonfür die.Net-Framework- bzw.Mono-Plattform.

Um Python als Skriptsprache für Programme inC++zu nutzen, werden zumeist dieBoost-Python-Bibliothek oder (in neueren Projekten) Cython verwendet.

Ein Python-ParserfürParrotund ein in Python geschriebenerJust-in-time-Compilerfür Python,PyPy,welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung.

Auch die Python-VariantePystonverwendet Just-in-time-Compilierung und beschleunigt so die Ausführung von Python-Programmen.[59]

Außerdem existiert ein Python-Interpreter fürMikrocontrollernamensMicroPython.[60]

Entwicklungsumgebung

[Bearbeiten|Quelltext bearbeiten]

NebenIDLE,das oft mit Python installiert wird und hauptsächlich aus einer Textumgebung und einerShellbesteht, wurden auch einige vollwertigeEntwicklungsumgebungen(IDEs) für Python entwickelt, beispielsweiseEric Python IDE,SpyderoderPyCharm.Weiterhin gibt esPlug-insfür größere IDEs wieEclipse,Visual Studio,IntelliJ IDEA[61]undNetBeans.Texteditoren für Programmierer wieVimundEmacslassen sich auch für Python anpassen: Ein einfacher Python-Mode ist bereits integriert, und komfortablere Erweiterungen können hinzugefügt werden.

Für die verschiedenenGUI-Toolkits,wie z. B.Tkinter(GUI-Builder),WxPython(wxGlade),PyQt(Qt Designer), PySide,PyGTK(Glade),KivyoderPyFLTKgibt es teils eigene Editoren, mit denen sich grafische Benutzeroberflächen auf vergleichsweise einfache Art aufbauen lassen.

Python unterstützt die Erstellung von Paketen; dabei helfendistutilsundsetuptools.Die Pakete werden auf PyPI, dem Python Package Index, gespeichert und von dort zur Installation abgerufen. Als Paketmanager wird üblicherweisepipoder auf alten Systemen aucheasy_installeingesetzt. Paketversionen derAnaconda (Python-Distribution)werden von derPaketverwaltungcondaverwaltet.[62]

Verbreitung und Einsatz

[Bearbeiten|Quelltext bearbeiten]

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-umgreifendWSGIverwendet, welches die Nachteile vonCGIumgeht. WSGI stellt eine universelle Schnittstelle zwischen Webserver und Python(-Framework) zur Verfügung.

Eine Reihe von Web-Application-Frameworksnutzt Python, darunterDjango,Pylons,SQLAlchemy,TurboGears,web2py,FlaskundZope.Ferner gibt es einen Python-Interpreter für dasSymbian-Betriebssystem, so dass Python auf verschiedenenMobiltelefonenverfügbar ist. In der Version 2.5.1 ist Python ein Bestandteil vonAmigaOS4.0.

Kommerzieller Einsatz

[Bearbeiten|Quelltext bearbeiten]

Bekannte kommerzielle Projekte, etwaGoogle SucheundYouTube,basieren in Teilen auf Python.[63]Auch in der Spieleindustrie findet die Sprache bisweilen Einsatz, etwa inEVE Online,World in ConflictundCivilization IV.

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.[64][65][66][67][68][69]Lehrbücher, die sich explizit an junge Menschen ohne Programmiererfahrung wenden, unterstützen und unterstreichen diese Entwicklung.[70]

Im Rahmen des Projektes100-Dollar-Laptopwird 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-Quellcodeangezeigt werden.[71]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 imROMintegrierten Python-Interpreter ausgeliefert werden.[72]Auch heute ist Python eine der bevorzugtesten Sprachen für den Raspberry Pi. Sein Standard-BetriebssystemRaspberry Pi OSkommt 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 Circlesz. B. wird von der Universität Waterloo in Kanada bereitgestellt. Die deutsche Version wird betrieben von den deutschen Bundesweiten Informatikwettbewerben.[73]TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.[74]

In der Wissenschaft

[Bearbeiten|Quelltext bearbeiten]

In derWissenschaftsgemeindegenieß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 Notebooksgenutzt.[75]Numerische Rechnungen und die visuelle Aufbereitung der Ergebnisse in Graphen werden meist mitNumPyund derMatplotliberledigt.AnacondaundSciPybündeln viele wissenschaftliche Python-Bibliotheken und machen sie somit einfacher zugänglich. MitTensorFlow,Keras,Scikit-learn,PyTorchu. a. gibt es große Bibliotheken zur Forschung und Nutzung vonmaschinellem LernenundDeep Learning(Künstliche Intelligenz).

Ende von Python 2

[Bearbeiten|Quelltext bearbeiten]

Die Unterstützung für Python 2 ist beendet. Die letzte 2er-Version war die 2.7.18 vom 20. April 2020;[76][77]seit diesem Datum wird Python 2 nicht mehr unterstützt.[78][79]Es gibt aber vielfältige und umfangreiche Dokumentationen zum Umstieg[80][81][82]und auch Tools, die bei der Migration helfen[83]oder es ermöglichen, Code zu schreiben, der mit Python 2 und 3 funktioniert.[84][85][86][87][88]

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[89],als unelegant und nicht objektorientiert empfunden.[90]Python-Schöpfer van Rossum verweist hingegen darauf, dass es nötig sei, um bestimmte wichtige Konstrukte zu ermöglichen.[91]Einer der Python-Grundsätze lautet zudem „Explicit is better than implicit “.[92]

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.[93]

AufMultiprozessor-Systemen behindert der sogenannteGlobal Interpreter Lock (GIL)von CPython die Effizienz von Python-Anwendungen, diesoftwareseitiges Multithreadingbenutzen. Diese Beschränkung existiert unterJythonoderIronPythonnicht. 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.[94]Alternativ wird empfohlen, mehrere miteinander kommunizierende Prozesse anstelle von Threads zu verwenden.[95][96]

In den vorherrschenden Implementationen ist die Ausführungsgeschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,[97]aber ähnlich wie beiPerl,[98]PHP,[99]Dart[100]undRuby.[101]Das liegt zum Teil daran, dass bei der Entwicklung von CPython der Klarheit des Codes gegenüber der Geschwindigkeit Vorrang eingeräumt wird.[102]Man beruft sich dabei auf Autoritäten wieDonald KnuthundTony Hoare,die von verfrühter Optimierung abraten. Wenn Geschwindigkeitsprobleme auftreten, die nicht durch Optimierung des Python-Codes gelöst werden können,[103]werden stattdessenJIT-Compiler wiePyPyverwendet oder zeitkritische Funktionen in maschinennähere Sprachen wieCoderCythonausgelagert.

Für den Einstieg

Referenzen

Weiterführendes

Commons:Python– Sammlung von Bildern, Videos und Audiodateien
Wikibooks: Python 2 unter Linux– Lern- und Lehrmaterialien

Für Fortgeschrittene

[Bearbeiten|Quelltext bearbeiten]
  1. abHistory and License - Python documentation.(abgerufen am 19. August 2016).
  2. History and License - Python documentation.(abgerufen am 3. Juli 2019).
  3. Python 3.13 released.7. Oktober 2024 (englisch, abgerufen am 7. Oktober 2024).
  4. Python 3.13.0 (final) released.7. Oktober 2024 (englisch, abgerufen am 8. Oktober 2024).
  5. Python 3.13 Debuts With New Interactive Interpreter & Experimental JIT.7. Oktober 2024 (englisch, abgerufen am 8. Oktober 2024).
  6. im Python ist.wordpress.(abgerufen am 19. August 2016).
  7. Why was Python created in the first place?Python Software Foundation (abgerufen am 22. März 2017).
  8. abClasses The Python Tutorial.Python Software Foundation.
  9. An Introduction to Python for UNIX/C Programmers.
  10. peps. Python.org.
  11. docs. Python.org.
  12. Functional Programming HOWTO.
  13. abdocs. Python.org.
  14. Download Python.
  15. History and License - Python documentation.
  16. What is Python Good For?In:General Python FAQ.Python Foundation,abgerufen am 5. September 2008(englisch).
  17. What is Python? Executive Summary.In:Python documentation.Python Foundation,abgerufen am 21. März 2007(englisch).
  18. Offizielle Python FAQ,sowiePython Tutorial, Kapitel 1
  19. The Cobra Programming Language.In:cobra-language.(englisch).
  20. Boa Constructor home.In:boa-constructor.sourceforge.net.(englisch).
  21. Guido van Rossum:Kommentar zur Entfernung einiger funktionaler Konzepte.Abgerufen am 11. August 2014(englisch).
  22. A. Kuchling, Moshe Zadka:Dokumentation Python 2.0.Python Software Foundation,abgerufen am 11. August 2014(englisch).
  23. Guido van Rossum:Dokumentation Python 3.0.Python Software Foundation, 14. Februar 2009,abgerufen am 11. August 2014(englisch).
  24. abcdefGuido van Rossum:A Brief Timeline of Python.20. Januar 2009,abgerufen am 29. November 2019(englisch).
  25. abReleases | Python.org.Abgerufen am 29. November 2019(englisch).
  26. Fred L. Jr. Drake:PEP 160 – Python 1.6 Release Schedule.25. Juli 2000,abgerufen am 29. November 2019(englisch).
  27. abcdefgDownload Python | Python.org.Abgerufen am 29. November 2019(englisch).
  28. Jeremy Hylton:PEP 200 – Python 2.0 Release Schedule.Abgerufen am 29. November 2019(englisch).
  29. Jeremy Hylton:PEP 226 – Python 2.1 Release Schedule.16. Oktober 2000,abgerufen am 29. November 2019(englisch).
  30. Barry Warsaw, Guido van Rossum:PEP 251 – Python 2.2 Release Schedule.17. April 2001,abgerufen am 29. November 2019(englisch).
  31. Guido van Rossum:PEP 283 – Python 2.3 Release Schedule.27. Februar 2002,abgerufen am 29. November 2019(englisch).
  32. Barry Warsaw, Raymond Hettinger, Anthony Baxter:PEP 320 – Python 2.4 Release Schedule.29. Juli 2003,abgerufen am 29. November 2019(englisch).
  33. Neal Norwitz, Guido van Rossum, Anthony Baxter:PEP 356 – Python 2.5 Release Schedule.7. Februar 2006,abgerufen am 29. November 2019(englisch).
  34. abNeal Norwitz, Barry Warsaw:PEP 361 – Python 2.6 and 3.0 Release Schedule.29. Juni 2006,abgerufen am 29. November 2019(englisch).
  35. Benjamin Peterson:PEP 373 – Python 2.7 Release Schedule.3. November 2008,abgerufen am 20. April 2020(englisch).
  36. 17. Development Cycle — Python Developer's Guide.Abgerufen am 29. November 2019(englisch).
  37. Benjamin Peterson:PEP 375 – Python 3.1 Release Schedule.8. Februar 2009,abgerufen am 29. November 2019(englisch).
  38. Georg Brandl:PEP 392 – Python 3.2 Release Schedule.30. Dezember 2009,abgerufen am 29. November 2019(englisch).
  39. Georg Brandl:PEP 398 – Python 3.3 Release Schedule.23. März 2011,abgerufen am 29. November 2019(englisch).
  40. Larry Hastings:PEP 429 – Python 3.4 Release Schedule.17. Oktober 2012,abgerufen am 29. November 2019(englisch).
  41. Larry Hastings:PEP 478 – Python 3.5 Release Schedule.22. September 2014,abgerufen am 17. März 2020(englisch).
  42. Ned Deily:PEP 494 – Python 3.6 Release Schedule.30. Mai 2015,abgerufen am 23. Mai 2022(englisch).
  43. Ned Deily:PEP 537 – Python 3.7 Release Schedule.23. Dezember 2016,abgerufen am 1. Februar 2023(englisch).
  44. Łukasz Langa:PEP 569 – Python 3.8 Release Schedule.27. Januar 2018,abgerufen am 1. Februar 2023(englisch).
  45. Łukasz Langa:PEP 596 – Python 3.9 Release Schedule.13. Oktober 2020,abgerufen am 1. Februar 2023(englisch).
  46. Pablo Salgado:PEP 619 – Python 3.10 Release Schedule.25. Mai 2020,abgerufen am 1. Februar 2023(englisch).
  47. Pablo Salgado:PEP 664 – Python 3.11 Release Schedule.12. Juli 2021,abgerufen am 1. Februar 2023(englisch).
  48. Thomas Wouters:PEP 693 – Python 3.12 Release Schedule.24. Mai 2022,abgerufen am 12. November 2022(englisch).
  49. Thomas Wouters:PEP 719 – Python 3.13 Release Schedule.26. Mai 2023,abgerufen am 13. April 2024(englisch).
  50. 2. Lexical analysisPython 3.7.2rc1 documentation. (englisch)
  51. Marty Alchin:Pro Python.Hrsg.: Apress. 2010,ISBN 978-1-4302-2757-1,S.6(englisch).
  52. Bill Venners:Interview mit Guido van Rossum.Artima, 13. Januar 2003,abgerufen am 15. August 2014(englisch).
  53. Verwendung fremdsprachiger Module.In:Python.Python Software Foundation,abgerufen am 8. August 2023(englisch).
  54. Guido van Rossum,Ivan Levkivskyi:PEP 483 – The Theory of Type Hints.Python Software Foundation, 19. Dezember 2014,abgerufen am 18. Oktober 2020(englisch).
  55. Guido van Rossum,Jukka Lehtosalo, Łukasz Langa:PEP 484 – Type Hints.Python Software Foundation, 29. September 2014,abgerufen am 18. Oktober 2020(englisch).
  56. Mark Lutz, David Ascher:Learning Python, 2nd Edition.In:Safari Books Online.23. Dezember 2003;(englisch).
  57. Design and History FAQ — Python 3 documentation.Abgerufen am 7. Juli 2024.
  58. Coconut(Erweiterung zu Python)
  59. Pyston.Python Performance.Abgerufen am 18. September 2022.
  60. MicroPython – Python for microcontrollers.In:micro Python.org.(englisch).
  61. Python – IntelliJ IDEA.In:jetbrains.8. März 2021,abgerufen am 14. Januar 2023(englisch).
  62. Conda documentation.Abgerufen am 25. Februar 2016(englisch).
  63. Quotes about Python.Abgerufen am 25. Juni 2011.
  64. Computer Science Circles– ein kostenfreier Dienst des Centre for Education in Mathematics and Computing, University of Waterloo.
  65. Programmieren lernen mit Python.App Camps gemeinnützige Unternehmergesellschaft, Hamburg
  66. Programming for Data Science with Python,Udacity
  67. Einstieg ins Programmieren mit Python.Web 2 Unterricht, 3. September 2017
  68. Python – die Programmiersprache für imperative und objektorientierte Programmierung.Bildungsserver Berlin-Brandenburg
  69. Programmieren mit Python.Bildungsserver Rheinland-Pfalz
  70. Man vergleiche z. B.Programmieren supereasy – Einfacher Einstieg in Scratch und Python.von Carol Vorderman und Jon Woodcock, Dorling Kindersley Verlag, oderPython 4 Kidsvon Gregor Lingl, Mitp Verlag
  71. OLPC-Wiki:„Python für den 100-Dollar-Laptop
  72. Karin Zühlke:Erstmals »Live on stage«: Farnell zeigt den Raspberry Pi Nachwuchs.(englisch).
  73. Programmieren lernen.Bundesweite Informatikwettbewerbe. Ein Projekt der Gesellschaft für Informatik e. V., des Fraunhofer-Verbunds IUK-Technologie und des Max-Planck-Instituts für Informatik.
  74. Flyer TigerJython – Programmierkonzepte mit Python(Mementovom 12. Juli 2021 imInternet Archive) (PDF; 468 kB) Pädagogischen Hochschule Bern
  75. Jupyter, Mathematica, and the Future of the Research Paper.paulromer.net, 13. April 2018,abgerufen am 12. Dezember 2019(englisch).
  76. 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(englisch).
  77. Silke Hahn:Programmiersprachen: Lang lebe Python 3 – finales Release von Python 2.In:heise online.21. April 2020,abgerufen am 12. Juli 2022.
  78. Python Software Foundation: Press Release 20-Dec-2019.Abgerufen am 12. Juli 2022(englisch).
  79. Golem.de: IT-News für Profis.Abgerufen am 12. Juli 2022.
  80. Porting Python 2 Code to Python 3 — Python 3.7.13 documentation.Abgerufen am 12. Juli 2022.
  81. The Conservative Python 3 Porting Guide — Conservative Python 3 Porting Guide 1.0 documentation.Abgerufen am 12. Juli 2022.
  82. Lennart Regebro:Supporting Python 3 — Supporting Python 3: An in-depth guide.Abgerufen am 12. Juli 2022(englisch).
  83. 25.4. 2to3 – Automated Python 2 to 3 code translation — Python 2.7.18 documentation.Abgerufen am 12. Juli 2022.
  84. six:pypi. Python.orgundArchivierte Kopie(Mementovom 8. Januar 2019 imInternet Archive)
  85. Python-Modernize — modernize 0.6.1 documentation.Abgerufen am 12. Juli 2022.
  86. Easy, clean, reliable Python 2/3 compatibility — Python-Future documentation.Abgerufen am 12. Juli 2022.
  87. Victor Stinner:sixer: Add Python 3 support to Python 2 applications using the six module.Abgerufen am 12. Juli 2022.
  88. limodou:2to6.25. Juni 2019,abgerufen am 12. Juli 2022.
  89. A. M. Kuchling.Abgerufen am 1. September 2020(englisch).
  90. amk.ca(Mementovom 2. Oktober 2003 imInternet Archive)
  91. Guido van Rossum:Why explicit self has to stay
  92. Tim Peters:The Zen of Python.Python Software Foundation, 19. August 2004,abgerufen am 12. August 2014(englisch).
  93. PEP 3135 – New Super.In:Python.org.(englisch).
  94. heise online:Python 3.13: Endlich effizienteres Multithreading ohne Global Interpreter Lock.15. März 2024,abgerufen am 21. Mai 2024.
  95. Library and Extension FAQ — Python 3.7.0 documentation.In:Python.org.(englisch).
  96. Guido van van Rossum:It isn’t Easy to Remove the GIL.In:Artima.(englisch).
  97. Python–C.Archiviert vomOriginalam26. Dezember 2015;abgerufen am 25. Dezember 2015(englisch).
  98. Python–Perl.Archiviert vomOriginalam26. Dezember 2015;abgerufen am 25. Dezember 2015(englisch).
  99. Benchmark-Vergleich Python–PHP.Archiviert vomOriginalam26. Dezember 2015;abgerufen am 25. Dezember 2015(englisch).
  100. Benchmark-Vergleich Python–Dart.Archiviert vomOriginalam26. Dezember 2015;abgerufen am 25. Dezember 2015(englisch).
  101. Benchmark-Vergleich Python–Ruby.Archiviert vomOriginalam26. Dezember 2015;abgerufen am 25. Dezember 2015(englisch).
  102. Python Culture.Archiviert vomOriginalam28. Dezember 2009;abgerufen am 23. Dezember 2009(englisch).
  103. Python Patterns – An Optimization Anecdote.In:Python.org.(englisch).