Zum Inhalt springen

„Python (Programmiersprache)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
KKeine Bearbeitungszusammenfassung
Änderung 255063466 von Berndcklein rückgängig gemacht; Vier Bücher des gleichen Autors, vom Autor selbst eingetragen, Das ist zu viel.
Markierung: Rückgängigmachung
 
Zeile 1: Zeile 1:
{{Infobox Programmiersprache
{{Infobox Programmiersprache
|Name = Python
| Name = Python
|Logo = [[Datei:Python_logo.svg|230px]]
| Logo = [[Datei:Python-logo-notext.svg|121px|Logo]]
| Beschreibung = Logo der Programmiersprache Python
|Paradigma = multiparadigmatisch
| Paradigma = multiparadigmatisch: [[Objektorientierte Programmierung|objektorientiert]], [[Prozedurale Programmierung|prozedural]] ([[Imperative Programmierung|imperativ]]), [[Funktionale Programmierung|funktional]], [[Strukturierte Programmierung|strukturiert]], [[Reflexion (Programmierung)|reflektiert]]
|Erscheinungsjahr = 1991
| Erscheinungsjahr = <!-- wikidata -->
|Entwickler = Python Software Foundation
| Designer = <!-- wikidata -->
|AktuelleVersion = 3.1.1 &nbsp;(16.&nbsp;August 2009)<br />2.6.4
| Entwickler = <!-- wikidata -->
|AktuelleVersionFreigabeDatum = 25.&nbsp;Oktober 2009
| AktuelleVersion = <!-- wikidata -->
|Typisierung = stark, dynamisch („[[Duck Typing]]“)
| AktuelleVersionFreigabeDatum = <!-- wikidata -->
|Implementierung = [[CPython]], [[Jython]], [[IronPython]], [[PyPy]]
| AktuelleVorabVersion =
|Beeinflusst_von = ABC, [[Algol 60]], [[Modula-3]], Icon, [[C (Programmiersprache)|C]], [[Perl (Programmiersprache)|Perl]], [[LISP]], [[Smalltalk (Programmiersprache)|Smalltalk]], [[TCL]], [[Haskell (Programmiersprache)|Haskell]]
| AktuelleVorabVersionFreigabeDatum =
|Beeinflusste = [[Ruby (Programmiersprache)|Ruby]], [[Boo (Programmiersprache)|Boo]], [[Groovy]]
| Typisierung = [[Starke Typisierung|stark]], [[Dynamische Typisierung|dynamisch]] („[[Duck-Typing]]“)
|Lizenz = [http://www.python.org/psf/license/ Python License]
| Implementierung = CPython, [[Jython]], [[IronPython]], [[PyPy]]
|Website = [http://www.python.org/ www.python.org]
| Dialekte =
| Standardisierungen =
| Beeinflusst_von = <!-- wikidata -->
| Beeinflusste = [[Ruby (Programmiersprache)|Ruby]], [[Cython]]
| Betriebssystem =
| Lizenz = <!-- wikidata -->
| Website = <!-- wikidata -->
}}
}}


'''Python''' ([{{IPA|ˈpʰaɪθn̩}}], [{{IPA|ˈpʰaɪθɑn}}], auf Deutsch auch [{{IPA|ˈpʰyːtɔn}}]) ist eine [[Allzweck-Programmiersprache|universell nutzbare]], üblicherweise [[Interpreter|interpretierte]], [[höhere Programmiersprache]].<ref>{{cite web |language=en |url= https://www.python.org/doc/faq/general/#what-is-python-good-for|title= What is Python Good For?|accessdate=2008-09-05 |work= General Python FAQ|publisher= Python Foundation}}</ref> Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern.<ref>{{cite web |language=en | url = https://www.python.org/doc/essays/blurb/ | title = What is Python? Executive Summary | publisher = Python Foundation | work = Python documentation | accessdate = 2007-03-21}}</ref> So werden beispielsweise [[Blockstruktur|Blöcke]] nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert.
'''Python''' [{{IPA|ˈpaɪθn̩}}] ist eine [[Programmiersprache]], die mehrere [[Programmierparadigma|Programmierparadigmen]] ermöglicht. So werden [[Objektorientierte Programmierung|objektorientierte]], [[Aspektorientierte Programmierung|aspektorientierte]] und [[Funktionale Programmierung|funktionale]] Programmierung unterstützt.

Python unterstützt mehrere [[Programmierparadigma|Programmierparadigmen]], z.&nbsp;B. die [[Objektorientierte Programmierung|objektorientierte]], die [[Aspektorientierte Programmierung|aspektorientierte]] und die [[Funktionale Programmierung|funktionale]] Programmierung. Ferner bietet es eine [[dynamische Typisierung]]. Wie viele [[Dynamische Programmiersprache|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 ==
== Entwicklungsgeschichte ==
[[Datei:Guido van Rossum.jpg|mini|hochkant|[[Guido van Rossum]], der Entwickler von Python]]
Die Sprache wurde Anfang der 1990er Jahre von [[Guido van Rossum]] am ''Centrum voor Wiskunde en Informatica'' (Zentrum für Mathematik und Informatik) in [[Amsterdam]] als Nachfolger für die Programmier-Lehrsprache ''ABC'' entwickelt und war ursprünglich für das verteilte [[Betriebssystem]] [[Amoeba (Betriebssystem)|Amoeba]] gedacht. Alle bisherigen Implementierungen der Sprache (siehe auch [[Jython]] oder [[Stackless Python]]) übersetzen den Text eines Python-Programms transparent in einen [[Bytecode|Zwischencode]], der dann von einem Interpreter ausgeführt wird.
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 (Programmiersprache)|ABC]]'' entwickelt und war ursprünglich für das verteilte [[Betriebssystem]] [[Amoeba (Betriebssystem)|Amoeba]] gedacht.


Der Name geht nicht, wie das Logo vermuten lässt, auf die gleichnamige Schlangengattung [[Pythons|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 [[Monty Python’s Flying Circus|Flying Circus]].<ref>[https://www.python.org/doc/faq/general/#why-is-it-called-python Offizielle Python FAQ], sowie [https://docs.python.org/3/tutorial/appetite.html Python Tutorial, Kapitel 1]</ref> Trotzdem etablierte sich die [[Assoziation (Psychologie)|Assoziation]] zur Schlange, was sich unter anderem in der Programmiersprache [[Cobra (Programmiersprache)|Cobra]]<ref>{{cite web |language=en|url=http://cobra-language.com/|title=The Cobra Programming Language|work=cobra-language.com}}</ref> sowie dem Python-Toolkit „Boa“<ref>{{cite web |language=en|url=http://boa-constructor.sourceforge.net/|title=Boa Constructor home|work=boa-constructor.sourceforge.net}}</ref> äußert.
== Namensherkunft ==
<!-- brauchen wir das?
Der Name geht nicht etwa (wie das Logo vermuten ließe) auf die gleichnamige Schlangengattung ([[Pythons]]) zurück, sondern bezog sich ursprünglich auf die englische Komikertruppe [[Monty Python]]. In der Dokumentation finden sich daher auch einige Anspielungen auf Sketche aus dem [[Monty Python’s Flying Circus|Flying Circus]].<ref>[http://www.python.org/doc/faq/general/#why-is-it-called-python Offizielle Python FAQ], sowie [http://docs.python.org/tut/node3.html Python Tutorial, Kapitel 1]</ref> Trotzdem etablierte sich die [[Assoziation (Psychologie)|Assoziation]] zur Schlange, was sich unter anderem in der Programmiersprache Cobra<ref>[http://cobra-language.com/ Cobra]</ref> sowie dem Python-Toolkit „Boa“<ref>http://boa-constructor.sourceforge.net</ref> äußert.
Über den Ursprung der Sprache führte van Rossum retrospektiv 1996 aus:


{{Zitat-en|Over six years ago, in December 1989, I was looking for a „hobby“ programming project that would keep me occupied during the week around Christmas. My office … would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix-/C-Hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python’s Flying Circus).
== Ziele ==
|Übersetzung=Vor sechs Jahren, im Dezember 1989, suchte ich nach einem Hobby-Projekt im Bereich der Programmierung, das mich in der Weihnachtswoche beschäftigen würde. Mein Büro würde geschlossen sein, aber ich besaß einen Heimcomputer und hatte nicht viel anderes zu tun. Ich entschied mich, einen Interpreter für die Skriptsprache zu schreiben, über die ich in letzter Zeit nachgedacht hatte: Ein Nachfahre von ABC, der Unix-/C-Programmierern gefallen würde. Ich wählte in einer leicht ehrfurchtslosen Stimmung (und als ein großer Fan von Monty Python’s Flying Circus) „Python“ als Arbeitstitel.|ref=
Python wurde mit dem Ziel entworfen, möglichst einfach und übersichtlich zu sein. Dies soll durch zwei Maßnahmen erreicht werden: Zum einen kommt die Sprache mit relativ wenigen Schlüsselwörtern aus<ref>http://docs.python.org/ref/keywords.html</ref>, zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dies führt dazu, dass Python eine Sprache ist, in der schnell und einfach programmiert werden kann. Sie ist daher besonders dort geeignet, wo Übersichtlichkeit und Lesbarkeit des Codes eine herausragende Rolle spielen – zum Beispiel in der Teamarbeit, bei Beschäftigung mit dem Quelltext nach längeren Pausen oder bei Programmieranfängern.
<ref>{{Internetquelle|url=https://www.python.org/doc/essays/foreword/|titel=Vorwort für das Buch „Programming Python“|autor=Guido van Rossum|datum=1996|zugriff=2014-08-12}}</ref>}}
-->
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>{{Internetquelle |autor=Guido van Rossum |url=http://www.artima.com/weblogs/viewpost.jsp?thread=98196 |titel=Kommentar zur Entfernung einiger funktionaler Konzepte |sprache=en |abruf=2014-08-11}}</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.&nbsp;Oktober 2000. Neue Funktionen umfassten eine voll funktionsfähige [[Garbage Collection]] (automatische Speicherbereinigung) und die Unterstützung für den [[Unicode]]-Zeichensatz.<ref>{{Internetquelle |autor=A. Kuchling, Moshe Zadka |url=https://docs.python.org/2/whatsnew/2.0.html |titel=Dokumentation Python 2.0 |hrsg=Python Software Foundation |sprache=en |abruf=2014-08-11}}</ref>
Durch die Möglichkeit, auch Programme anderer Sprachen als Modul einzubetten, werden viele Nischen in der Programmierung abgedeckt. Bei Bedarf lassen sich so beispielsweise zeitkritische Teile durch [[Maschinensprache|maschinennah]] in [[C (Programmiersprache)|C]] programmierte Routinen ersetzen, oder Python kann als [[Skriptsprache]] eines anderen Programms dienen (Beispiele: [[OpenOffice.org]], [[Blender (Software)|Blender]], [[Cinema 4D]], [[Maya (Software)|Maya]], [[PyMOL]], [[SPSS]] und [[GIMP]]).


Python 3.0 (auch Python 3000) erschien am 3.&nbsp;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>{{Internetquelle |autor=Guido van Rossum |url=https://docs.python.org/3.0/whatsnew/3.0.html |titel=Dokumentation Python 3.0 |hrsg=Python Software Foundation |datum=2009-02-14 |sprache=en |abruf=2014-08-11}}</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|Ende von Python 2]]'').
Python ist eine Multiparadigmensprache. Das heißt, Python zwingt den Programmierer nicht zu einem einzigen bestimmten Programmierparadigma, sondern erlaubt es, das für die jeweilige Aufgabe am besten geeignete Paradigma zu wählen. Objektorientierte und [[Strukturierte Programmierung|strukturierte]] Programmierung werden vollständig unterstützt, weiterhin gibt es Spracheigenschaften für [[Funktionale Programmiersprache|funktionale]] und [[Aspektorientierte Programmierung|aspektorientierte]] Programmierung.

== Versionen ==

{| class="wikitable sortable"
|-
! Version
! Patchversion
! Veröffentlichung
! Ende des vollen Supports
! Ende der Sicherheitskorrekturen
|-
| {{Version|o|0.9}}
| 0.9.9<ref name="timeline-of-python">{{cite web |language=en |url=http://python-history.blogspot.com/2009/01/brief-timeline-of-python.html |title=A Brief Timeline of Python |last=van Rossum |first=Guido |author-link1=Guido van Rossum |date=2009-01-20 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|1991-02-20}}
| {{DatumZelle|1993-07-29}}
|
|-
| {{Version|o|1.0}}
| 1.0.4<ref name="timeline-of-python" />
| {{DatumZelle|1994-01-26}}
| {{DatumZelle|1994-02-15}}
|
|-
| {{Version|o|1.1}}
| 1.1.1<ref name="timeline-of-python" />
| {{DatumZelle|1994-10-11}}
| {{DatumZelle|1994-11-10}}
|
|-
| {{Version|o|1.2}}
|
| {{DatumZelle|1995-04-13}}<ref name="timeline-of-python" />
| Unsupported
|
|-
| {{Version|o|1.3}}
|
| {{DatumZelle|1995-10-13}}<ref name="timeline-of-python" />
| Unsupported
|
|-
| {{Version|o|1.4}}
|
| {{DatumZelle|1996-10-25}}<ref name="timeline-of-python" />
| Unsupported
|
|-
| {{Version|o|1.5}}
| 1.5.2<ref name="releases">{{cite web |language=en |url=https://www.python.org/download/releases |title=Releases {{!}} Python.org|access-date=2019-11-29 }}</ref>
| {{DatumZelle|1998-01-03}}
| {{DatumZelle|1999-04-13}}
|
|-
| {{Version|o|1.6}}
| 1.6.1<ref name="releases" />
| {{DatumZelle|2000-09-05}}<ref name="pep-0160">{{cite web |language=en |url=https://peps.python.org/pep-0160/ |title=PEP 160 – Python 1.6 Release Schedule |last=Drake |first=Fred L. Jr. |date=2000-07-25 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2000-09}}
|
|-
| {{Version|o|2.0}}
| 2.0.1<ref name="downloads">{{cite web |language=en |url=https://www.python.org/downloads/ |title=Download Python {{!}} Python.org|access-date=2019-11-29 }}</ref>
| {{DatumZelle|2000-10-16}}<ref name="pep-0200">{{cite web |language=en |url=https://peps.python.org/pep-0200/ |title=PEP 200 – Python 2.0 Release Schedule |last=Hylton |first=Jeremy |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2001-06-22}}
|
|-
| {{Version|o|2.1}}
| 2.1.3<ref name="downloads" />
| {{DatumZelle|2001-04-15}}<ref name="pep-0226">{{cite web |language=en |url=https://peps.python.org/pep-0226/ |title=PEP 226 – Python 2.1 Release Schedule |last=Hylton |first=Jeremy |date=2000-10-16 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2002-04-09}}
|
|-
| {{Version|o|2.2}}
| 2.2.3<ref name="downloads" />
| {{DatumZelle|2001-12-21}}<ref name="pep-0251">{{cite web |language=en |url=https://peps.python.org/pep-0251/ |title=PEP 251 – Python 2.2 Release Schedule |last1=Warsaw |first1=Barry |last2=van Rossum |first2=Guido |date=2001-04-17 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2003-05-30}}
|
|-
| {{Version|o|2.3}}
| 2.3.7<ref name="downloads" />
| {{DatumZelle|2003-06-29}}<ref name="pep-0283">{{cite web |language=en |url=https://peps.python.org/pep-0283/ |title=PEP 283 – Python 2.3 Release Schedule |last=van Rossum |first=Guido |date=2002-02-27 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2008-03-11}}
|
|-
| {{Version|o|2.4}}
| 2.4.6<ref name="downloads" />
| {{DatumZelle|2004-11-30}}<ref name="pep-0320">{{cite web |language=en |url=https://peps.python.org/pep-0320/ |title=PEP 320 – Python 2.4 Release Schedule |last1=Warsaw |first1=Barry |last2=Hettinger |first2=Raymond |last3=Baxter |first3=Anthony |date=2003-07-29 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2008-12-19}}
|
|-
| {{Version|o|2.5}}
| 2.5.6<ref name="downloads" />
| {{DatumZelle|2006-09-19}}<ref name="pep-0356">{{cite web |language=en |url=https://peps.python.org/pep-0356/ |title=PEP 356 – Python 2.5 Release Schedule |last1=Norwitz |first1=Neal |last2=van Rossum |first2=Guido |last3=Baxter |first3=Anthony |date=2006-02-07 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2011-05-26}}
|
|-
| {{Version|o|2.6}}
| 2.6.9<ref name="pep-0361">{{cite web |language=en |url=https://peps.python.org/pep-0361/ |title=PEP 361 – Python 2.6 and 3.0 Release Schedule |last1=Norwitz |first1=Neal |last2=Warsaw |first2=Barry |date=2006-06-29 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2008-10-01}}
| {{DatumZelle|2010-08-24}}
| {{DatumZelle|2013-10-29}}
|-
| {{Version|o|2.7}}
| 2.7.18<ref name="pep-0373">{{cite web |language=en |url=https://peps.python.org/pep-0373/ |title=PEP 373 – Python 2.7 Release Schedule |last=Peterson |first=Benjamin |date=2008-11-03 |access-date=2020-04-20 }}</ref>
| {{DatumZelle|2010-07-03}}
| {{DatumZelle|2020-01-01}}
| {{DatumZelle|2020-01-01}}
|-
| {{Version|o|3.0}}
| 3.0.1<ref name="downloads" /><ref name="pep-0361" /><ref name="devcycle">{{cite web |language=en |url=https://devguide.python.org/devcycle/ |title=17. Development Cycle — Python Developer's Guide |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2008-12-03}}
| {{DatumZelle|2009-06-27}}
| {{DatumZelle|2009-06-27}}
|-
| {{Version|o|3.1}}
| 3.1.5<ref name="pep-0375">{{cite web |language=en |url=https://peps.python.org/pep-0375/ |title=PEP 375 – Python 3.1 Release Schedule |last=Peterson |first=Benjamin |date=2009-02-08 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2009-06-27}}
| {{DatumZelle|2011-06-12}}
| {{DatumZelle|2012-04-06}}
|-
| {{Version|o|3.2}}
| 3.2.6<ref name="pep-0392">{{cite web |language=en |url=https://peps.python.org/pep-0392/ |title=PEP 392 – Python 3.2 Release Schedule |last=Brandl |first=Georg |date=2009-12-30 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2011-02-20}}
| {{DatumZelle|2013-05-13}}
| {{DatumZelle|2016-02-20}}
|-
| {{Version|o|3.3}}
| 3.3.7<ref name="pep-0398">{{cite web |language=en |url=https://peps.python.org/pep-0398/ |title=PEP 398 – Python 3.3 Release Schedule |last=Brandl |first=Georg |date=2011-03-23 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2012-09-29}}
| {{DatumZelle|2014-03-08}}
| {{DatumZelle|2017-09-29}}
|-
| {{Version|o|3.4}}
| 3.4.10<ref name="pep-0429">{{cite web |language=en |url=https://peps.python.org/pep-0429/ |title=PEP 429 – Python 3.4 Release Schedule |last=Hastings |first=Larry |date=2012-10-17 |access-date=2019-11-29 }}</ref>
| {{DatumZelle|2014-03-16}}
| {{DatumZelle|2017-08-09}}
| {{DatumZelle|2019-03-18}}
|-
| {{Version|o|3.5}}
| 3.5.10<ref name="pep-0478">{{cite web |language=en |url=https://peps.python.org/pep-0478/ |title=PEP 478 – Python 3.5 Release Schedule |last=Hastings |first=Larry |date=2014-09-22 |access-date=2020-03-17 }}</ref>
| {{DatumZelle|2015-09-13}}
| {{DatumZelle|2017-08-08}}
| {{DatumZelle|2020-09-30}}
|-
| {{Version|o|3.6}}
| 3.6.15<ref name="pep-0494">{{cite web |language=en |url=https://peps.python.org/pep-0494/ |title=PEP 494 – Python 3.6 Release Schedule |last=Deily |first=Ned |date=2015-05-30 |access-date=2022-05-23 }}</ref>
| {{DatumZelle|2016-12-23}}
| {{DatumZelle|2018-12-24}}
| {{DatumZelle|2021-12-23}}
|-
| {{Version|o|3.7}}
| 3.7.17<ref name="pep-0537">{{cite web |language=en |url=https://peps.python.org/pep-0537/ |title=PEP 537 – Python 3.7 Release Schedule |last=Deily |first=Ned |date=2016-12-23 |access-date=2023-02-01 }}</ref>
| {{DatumZelle|2018-06-27}}
| {{DatumZelle|2020-06-27}}
| {{DatumZelle|2023-06-27}}
|-
| {{Version|o|3.8}}
| 3.8.20<ref name="pep-0569">{{cite web |language=en |url=https://peps.python.org/pep-0569/ |title=PEP 569 – Python 3.8 Release Schedule |last=Langa |first=Łukasz |date=2018-01-27 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2019-10-14}}
| {{DatumZelle|2021-05-03}}
| {{DatumZelle|2024-10}}
|-
| {{Version|co|3.9}}
| 3.9.21<ref name="pep-0596">{{cite web |language=en |url=https://peps.python.org/pep-0596/ |title=PEP 596 – Python 3.9 Release Schedule |last=Langa |first=Łukasz |date=2020-10-13 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2020-10-05}}
| {{DatumZelle|2022-05-17}}
| {{DatumZelle|2025-10}}
|-
| {{Version|co|3.10}}
| 3.10.16<ref name="pep-0619">{{cite web |language=en |url=https://peps.python.org/pep-0619/ |title=PEP 619 – Python 3.10 Release Schedule |last=Salgado |first=Pablo |date=2020-05-25 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2021-10-04}}
| {{DatumZelle|2023-05}}
| {{DatumZelle|2026-10}}
|-
| {{Version|co|3.11}}
| 3.11.11<ref name="pep-0664">{{cite web |language=en |url=https://peps.python.org/pep-0664/ |title=PEP 664 – Python 3.11 Release Schedule |last=Salgado | first=Pablo |date=2021-07-12 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2022-10-24}}
| {{DatumZelle|2024-05}}
| {{DatumZelle|2027-10}}
|-
| {{Version|c|3.12}}
| 3.12.10<ref>{{cite web |language=en |url=https://peps.python.org/pep-0693/ |title=PEP 693 – Python 3.12 Release Schedule |last=Wouters | first=Thomas |date=2022-05-24 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2023-10-02}}
| {{DatumZelle|2025-05}}
| {{DatumZelle|2028-10}}
|-
| {{Version|c|3.13}}
| 3.13.1<ref>{{cite web |language=en |url=https://peps.python.org/pep-0719/ |title=PEP 719 – Python 3.13 Release Schedule |last=Wouters | first=Thomas |date=2023-05-26 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2024-10-01}}
| {{DatumZelle|2026-10}}
| {{DatumZelle|2029-10}}
|-
| {{Version|p|3.14}}
| <ref>{{cite web |language=en |url=https://peps.python.org/pep-0745/ |title=PEP 745 – Python 3.14 Release Schedule |last=van Kemenade | first=Hugo |date=2024-04-24 |access-date=2024-12-27 }}</ref>
| {{DatumZelle|2025-10}}
| {{DatumZelle|2027-10}}
| {{DatumZelle|2030-10}}
|}
{{Version|t|zeige=11101}}

== 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üsselwort (Programmierung)|Schlüsselwörtern]] aus.<ref>{{Internetquelle |url=https://docs.python.org/3/reference/lexical_analysis.html#keywords |titel=2. Lexical analysis |sprache=en |abruf=2024-12-13}}</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>{{Literatur |Autor=Marty Alchin |Hrsg=Apress |Titel=Pro Python |Datum=2010 |ISBN=978-1-4302-2757-1 |Seiten=6 |Sprache=en}}</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 (Programmiersprache)|ABC]], in der das Gegenteil der Fall ist.<ref>{{Internetquelle |autor=Bill Venners |url=http://www.artima.com/intv/pythonP.html |titel=Interview mit Guido van Rossum |hrsg=Artima |datum=2003-01-13 |sprache=en |abruf=2014-08-15}}</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 (Programmiersprache)|C]] implementierte Routinen aufgerufen werden.<ref>{{Internetquelle |url=https://docs.python.org/3/extending/extending.html |titel=Verwendung fremdsprachiger Module |werk=Python |hrsg=Python Software Foundation |sprache=en |abruf=2023-08-08}}</ref> Umgekehrt lassen sich mit Python Module und [[Plug-in]]s für andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist unter anderem bei [[Blender (Software)|Blender]], [[Cinema 4D]], [[GIMP]], [[Maya (Software)|Maya]], [[Nuke (Software)|Nuke]], [[Apache OpenOffice|OpenOffice]] bzw. [[LibreOffice]], [[PyMOL]], [[SPSS]], [[QGIS]] oder [[KiCad]] der Fall.
Die [[Datentyp]]en werden dynamisch verwaltet; eine statische [[Typsicherheit|Typprüfung]] (wie z. B. bei [[C++]]) gibt es nicht. Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch [[Garbage Collection|automatische Speicherbereinigung]] (''garbage collection''). [[Unicode]]-Unterstützung existiert seit Version 2.0.


Python ist eine Multi[[Programmierparadigma|paradigmen]]<nowiki />sprache. 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|strukturierte]] Programmierung werden vollständig unterstützt, funktionale und aspektorientierte Programmierung werden durch einzelne Elemente der Sprache unterstützt.
In Version 2.6 bis 2.6.3 können sich Entwickler mit dem Kommandozeilenparameter „-3“ alle Konstrukte in ihrem Code anzeigen lassen, die es ab Python 3.0 nicht mehr gibt.<ref>heise.de: [http://www.heise.de/newsticker/Python-2-6-oeffnet-Wege-zu-Version-3--/meldung/116831 Python 2.6 öffnet Wege zu Version 3] vom 2. Oktober 2008, abgerufen am 4. Oktober 2008</ref>
Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch [[Referenzzählung]].
[[Datentyp]]en werden dynamisch verwaltet, eine automatische statische [[Typsicherheit|Typprüfung]] wie z.&nbsp;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>{{Internetquelle |autor=[[Guido van Rossum]], Ivan Levkivskyi |url=https://www.python.org/dev/peps/pep-0483/ |titel=PEP 483 – The Theory of Type Hints |hrsg=Python Software Foundation |datum=2014-12-19 |sprache=en |abruf=2020-10-18}}</ref><ref>{{Internetquelle |autor=[[Guido van Rossum]], Jukka Lehtosalo, Łukasz Langa |url=https://www.python.org/dev/peps/pep-0484/ |titel=PEP 484 – Type Hints |hrsg=Python Software Foundation |datum=2014-09-29 |sprache=en |abruf=2020-10-18}}</ref>


== Datentypen und Strukturen ==
== Datentypen und Strukturen ==
[[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|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 Zahl]]en.


Die üblichen Zeichenkettenoperationen werden unterstützt. [[Zeichenkette]]n sind in Python allerdings unveränderliche Objekte (wie auch in [[Java (Programmiersprache)|Java]]). Daher geben Operationen, die eine Zeichenkette verändern sollen – wie z.&nbsp;B. durch Ersetzen von Zeichen – immer eine neue Zeichenkette zurück.
Python besitzt eine größere Anzahl von grundlegenden [[Datentyp]]en.
Neben der herkömmlichen Ganzzahl- und [[Gleitkommazahl|Gleitkommaarithmetik]] unterstützt es transparent auch beliebig große Ganzzahlen und [[komplexe Zahlen]].


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.&nbsp;h. Datentypen werden dynamisch vergeben, so wie bei [[Smalltalk (Programmiersprache)|Smalltalk]] oder [[Lisp]] – und nicht wie bei Java.
Es verfügt über die übliche Ausstattung an Zeichenkettenoperationen. [[Zeichenkette]]n sind in Python allerdings unveränderliche Objekte (wie auch in [[Java (Programmiersprache)|Java]]). Damit führen Operationen, die das Ändern einer Zeichenkette bewerkstelligen sollen – wie z.&nbsp;B. das Ersetzen von Zeichen – dazu, dass stattdessen eine ''neue'' Zeichenkette zurückgegeben wird.


Trotz der dynamischen Typverwaltung enthält Python eine gewisse Typprüfung. Diese ist strenger als bei [[Perl (Programmiersprache)|Perl]], aber weniger strikt als etwa bei [[Objective CAML]].
In Python ist der Datentyp an das Objekt (den ''Wert'') gebunden und nicht an eine Variable, d.&nbsp;h. Datentypen werden dynamisch vergeben, so wie bei [[Smalltalk (Programmiersprache)|Smalltalk]] oder [[LISP]] – und nicht wie bei [[Java (Programmiersprache)|Java]]. Alle Werte werden per Referenz übergeben. In Python ist alles ein Objekt; Klassen, Typen, Methoden, Module etc.
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 <code>%</code> gibt es eine implizite Umwandlung eines Objekts in eine Zeichenkette. Der Operator <code>==</code> überprüft zwei Objekte auf (Wert-)Gleichheit. Der Operator <code>is</code> überprüft die tatsächliche [[Identität (Logik)|Identität]] zweier Objekte.<ref>{{cite web |language=en|url=http://my.safaribooksonline.com/0596002815|title=Learning Python, 2nd Edition|first1=Mark|last1=Lutz|first2=David|last2=Ascher|date=2003-12-23|work=Safari Books Online}}</ref>
Trotz der dynamischen Typverwaltung enthält Python eine gewisse [[Typsicherheit|Typprüfung]]. Diese ist strenger als bei [[Perl (Programmiersprache)|Perl]], aber weniger strikt als etwa bei [[Objective CAML]].
Implizite Umwandlungen nach dem [[Duck-Typing|Duck-Typing-Prinzip]] sind unter Anderem für numerische Typen definiert, so dass man beispielsweise eine komplexe Zahl mit einer langen Ganzzahl ohne explizite Typumwandlung multiplizieren kann.
Anders als bei Perl gibt es allerdings keine implizite Umwandlung zwischen Zahlen und Zeichenketten; in Operationen für Zeichenketten kann also anstelle einer Zeichenkette nicht direkt eine Zahl verwendet werden. Der Operator ''=='' überprüft zwei Objekte auf (Wert-)Gleichheit. Der Operator ''is'' überprüft die tatsächliche [[Identität_(Logik)|Identität]] zweier Objekte.<ref>http://my.safaribooksonline.com/0596002815/lpython2-CHP-7-SECT-6</ref>


=== Sammeltypen ===
=== Sammeltypen ===
Python besitzt mehrere ''Sammeltypen'', darunter Listen, [[Tupel (Informatik)|Tupel]], [[Menge (Datenstruktur)|Mengen]] (Sets) und [[Assoziatives Datenfeld|assoziative Arrays]] (Dictionaries). Listen, Tupel und Zeichenketten sind ''Folgen'' (Sequenzen, [[Feld (Datentyp)|Felder]]) und kennen fast alle die gleichen Methoden: Über die Zeichen einer Kette kann man ebenso [[Iteration|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.&nbsp;B. erweiterbare Felder, wohingegen Tupel und Zeichenketten eine feste Länge haben und unveränderlich sind.


Der Zweck solcher Unveränderlichkeit hängt z.&nbsp;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.
Python besitzt mehrere ''Sammeltypen'', darunter [[Liste (Datenstruktur)|Listen]], [[Tupel (Informatik)|Tupel]], [[Menge (Datenstruktur)|Mengen]] (Sets) und [[Assoziatives Array|Wörterbücher]] (Dictionaries). Listen, Tupel und Zeichenketten sind ''Folgen'' (Sequenzen, [[Feld (Datentyp)|Arrays]]) und kennen fast alle die gleichen Methoden: Über die Zeichen einer Kette kann man ebenso [[Iteration|iterieren]] wie über die Elemente einer Liste. Listen sind erweiterbare Felder (Arrays), wohingegen Tupel eine feste Länge haben und unveränderlich sind.


''Sets'' sind Mengen von Objekten und in CPython ab Version 2.4 im Standardsprachumfang enthalten. Diese Datenstruktur kann beliebige (paarweise unterschiedliche) Objekte aufnehmen und stellt Mengenoperationen wie beispielsweise [[Menge (Mathematik)#Durchschnitt (Schnittmenge, Schnitt)|Durchschnitt]], [[Mengenlehre#Differenz und Komplement|Differenz]] und [[Menge (Mathematik)#Vereinigung (Vereinigungsmenge)|Vereinigung]] zur Verfügung.
Der Zweck solcher Unveränderlichkeit hängt mit den ''Wörterbüchern'' zusammen, ein Datentyp, der auch als
<!-- [[Hashtabelle]] oder
Ein Hashtable ist nicht gleichbedeutend mit Woerterbuch.
Vielmehr ist es eine spezielle Form der *Implementierung* eines Woerterbuches,
neben z.B. binaeren Baeumen. (jfieres, 11.4.07)
-->
''[[assoziatives Array]]'' bezeichnet wird.
Um auch unter den Bedingungen der Übergabe per Referenz die Datenkonsistenz zu sichern, müssen die ''Schlüssel'' eines Wörterbuches vom Typ „unveränderlich“ sein. Die ins Wörterbuch eingetragenen ''Werte'' können dagegen von beliebigem Typ sein.

''Sets'' sind Mengen von Objekten und in CPython ab Version 2.4 im Standardsprachumfang enthalten. Diese Datenstruktur kann beliebige (paarweise unterschiedliche) Objekte aufnehmen und stellt Mengenoperationen wie beispielsweise [[Menge (Mathematik)#Durchschnitt (Schnittmenge, Schnitt)|Durchschnitt]], [[Mengenlehre#Differenz_und_Komplement|Differenz]] und [[Menge (Mathematik)#Vereinigung (Vereinigungsmenge, „Summe“)|Vereinigung]] zur Verfügung.


=== Objektsystem ===
=== Objektsystem ===
Das [[Typsystem]] von Python ist auf das Klassensystem abgestimmt. Obwohl die eingebauten Datentypen genau genommen keine [[Klasse (Objektorientierung)|Klassen]] sind, können Klassen von einem Typ [[Vererbung (Programmierung)|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.
Das [[Typsystem]] von Python ist auf das Klassensystem abgestimmt. Obwohl die eingebauten Datentypen genau genommen keine [[Klasse (objektorientierte Programmierung)|Klassen]] sind, können Klassen von einem Typ [[Vererbung (Programmierung)|erben]]. So kann man die Eigenschaften von Zeichenketten oder Wörterbüchern erweitern – auch von Ganzzahlen. Python unterstützt daneben 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 – in Wirklichkeit sind die Typen (wie in [[Smalltalk (Programmiersprache)|Smalltalk]]) selbst ein Objekt. Die Attribute eines Objektes können als Wörterbuch extrahiert werden.


== Syntax ==
== 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.&nbsp;B. <code>or</code> statt <code>||</code>). Für [[strukturierte Programmierung]] besitzt Python die folgenden Elemente:


* Schleifen (wiederholte Ausführung):
Eines der Entwurfsziele für Python war die gute Lesbarkeit des Quellcodes.
** <code>for</code> … <code>else</code> zur Iteration über die Elemente einer Sequenz
Die Anweisungen benutzen häufig englische Schlüsselwörter, wo andere Sprachen Symbole einsetzen.
** <code>while</code> … <code>else</code> zur Wiederholung, solange ein Ausdruck den Boolean-Wert <code>True</code> hat
Darüber hinaus besitzt Python weniger syntaktische Konstruktionen als viele andere strukturierte Sprachen wie [[C (Programmiersprache)|C]], [[Perl (Programmiersprache)|Perl]] oder [[Pascal (Programmiersprache)|Pascal]]:
* Verzweigungen (bedingte Ausführung):

** <code>if</code> … <code>elif</code> … <code>else</code> für bedingte Verzweigungen
* zwei Schleifenformen
** <code>match</code> … <code>case</code> … <code>if</code> für strukturiertes [[Pattern Matching#Programmierung|Pattern Matching]]
** <code>for</code> zur Iteration über die Elemente einer Sequenz
* Exceptions (Ausführung im Fehlerfall):
** <code>while</code> zur Wiederholung einer Schleife, solange ein logischer Ausdruck wahr ist.
** <code>try</code> … <code>except</code> … <code>else</code> … <code>finally</code> für Ausnahmebehandlungen
* Verzweigungen
** <code>with</code> zum Ausführen eines Blocks mit einem Kontext-Manager
** <code>if … elif … else</code> für Verzweigungen


Im Gegensatz zu vielen anderen Sprachen können <code>for</code>- und <code>while</code>-Schleifen einen <code>else</code>-Zweig haben. Dieser wird nur ausgeführt, wenn die Schleife vollständig durchlaufen und nicht mittels <code>break</code>, <code>return</code> oder einer Ausnahme abgebrochen wurde.
Beim letzten Punkt bieten andere Programmiersprachen zusätzlich <code>switch</code> und/oder <code>goto</code>. Diese wurden zugunsten der Lesbarkeit in Python weggelassen und müssen durch <code>if</code>-Konstrukte oder andere Verzweigungsmöglichkeiten (Slices, Wörterbücher) abgebildet werden.


=== Strukturierung durch Einrücken ===
=== Strukturierung durch Einrücken ===
Python benutzt wie [[Miranda (Programmiersprache)|Miranda]] und [[Haskell (Programmiersprache)|Haskell]] [[Einrückungsstil|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 [[Leerraum|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 [[Einrückungsstil|Stil]]-Diskussionen ein Ende.<ref>{{Internetquelle |url=https://docs.python.org/3/faq/design.html#why-does-python-use-indentation-for-grouping-of-statements |titel=Design and History FAQ — Python 3 documentation |abruf=2024-07-07}}</ref>


Hierzu als Beispiel die Berechnung der [[Fakultät (Mathematik)|Fakultät]] einer Ganzzahl, einmal in [[C (Programmiersprache)|C]] und einmal in Python:
Python benutzt wie [[Miranda (Programmiersprache)|Miranda]] und [[Haskell (Programmiersprache)|Haskell]] [[Einrückungsstil|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üsselworte markiert, während verschieden große [[Leerraum|Leerräume]] außerhalb von Zeichenketten keine spezielle Semantik tragen. Bei diesen Sprachen ist die Einrückung zur optischen Hervorhebung eines Blockes zwar erlaubt und in der Regel auch erwünscht, aber nicht vorgeschrieben. Für Programmierneulinge wird der Zwang zu lesbarem Stil aber als Vorteil gesehen.


Fakultätsfunktion in C:
Hierzu ein kurzes Beispiel: Hier sind Funktionen in [[C (Programmiersprache)|C]] und in Python, die das gleiche ausführen – die [[Fakultät (Mathematik)|Fakultät]] einer Ganzzahl berechnen.
<syntaxhighlight lang="c">
int factorial(int x) {
if (x <= 1) {
return 1;
}


return x * factorial(x - 1);
Fakultätsfunktion in C (ohne Einrückung):
}
</syntaxhighlight>


Die gleiche Funktion in Python:
<source lang="c">
<syntaxhighlight lang="python">
int fakultaet(int x) {if (x > 1) return x * fakultaet(x - 1); else return 1;}
def factorial(x):
</source>
if x <= 1:
return 1


return x * factorial(x - 1)
Fakultätsfunktion in C (mit Einrückung):
</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.
<source lang="c">
int fakultaet(int x)
{
if (x > 1)
return x * fakultaet(x - 1);
else
return 1;
}
</source>


Man kann die Fakultätsfunktion aber auch wie in C einzeilig mit [[Ternärer Operator|ternärem Operator]] formulieren:
Jetzt die gleiche Funktion in Python:


Die Fakultätsfunktion in C:
<source lang="python">
<syntaxhighlight lang="c">
def fakultaet(x):
int factorial(int x) {
if x > 1:
return x * fakultaet(x - 1)
return x <= 1 ? 1 : x * factorial(x - 1);
}
else:
</syntaxhighlight>
return 1
</source>


Die Fakultätsfunktion in Python:
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 für den Pythoninterpreter ein Tabulator äquivalent zu acht Leerzeichen behandelt wird. Editoren ohne Pythonunterstützung stellen einen Tabulator meist optisch als weniger als acht Leerzeichen dar, was zu Syntaxfehlern oder ungewollter Programmstrukturierung führen kann. Pythonfähige Editoren ersetzen in der Regel als vorbeugende Maßnahme alle Tabulatoren durch eine feste Anzahl Leerzeichen.
<syntaxhighlight lang="python">
def factorial(x):
return 1 if x <= 1 else x * factorial(x - 1)
</syntaxhighlight>


=== Funktionales Programmieren ===
=== Funktionales Programmieren ===
Coconut<ref>[http://coconut-lang.org/ 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 [[Funktionale Programmierung|funktionalen Programmierung]] vereinfachen das Arbeiten mit Listen und anderen Sammeltypen. Eine solche Vereinfachung ist die Listennotation, die aus der funktionalen Programmiersprache [[Haskell (Programmiersprache)|Haskell]] stammt; hier bei der Berechnung der ersten fünf Zweierpotenzen:
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">

<source lang="python">
zahlen = [1, 2, 3, 4, 5]
zahlen = [1, 2, 3, 4, 5]
zweierpotenzen = [2 ** n for n in zahlen]
zweierpotenzen = [2 ** n for n in zahlen]
</syntaxhighlight>
</source>
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 <code>lambda</code> könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solche <code>lambda</code>-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]]:
Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie den [[Continuation-passing_style|Continuation-passing style]].
<syntaxhighlight lang="python">

Pythons Schlüsselwort <tt>lambda</tt> könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solche <tt>lambda</tt>-Blöcke in Python können nur Ausdrücke enthalten, aber keine Anweisungen. Damit sind sie nicht der allgemeinste Weg, 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]]:

<source lang="python">
def add_and_print_maker(x):
def add_and_print_maker(x):
def temp(y):
def temp(y):
print("{} + {} = {}".format(x, y, x + y))
print(f'{x} + {y} = {x + y}')

return temp
return temp
</syntaxhighlight>
</source>


Damit ist auch [[Currying]] auf einfache Art möglich, um generische Funktionsobjekte auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel:
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 <code>curry</code>-Funktion aufgerufen, erwartet diese eine Funktion mit zwei notwendigen Parametern sowie die Parameterbelegung für den zweiten Parameter dieser Funktion. Der Rückgabewert von <code>curry</code> ist eine Funktion, die das Gleiche tut wie <code>func</code>, aber nur noch einen Parameter benötigt.
<source lang="python">
def curry(func, knownargument):
return lambda unknownargument: func(unknownargument, knownargument)
</source>


[[Closure (Funktion)|Closures]] sind mit den o.&nbsp;g. Mechanismen in Python ebenfalls einfach möglich. Ein simples Beispiel für einen [[Stapelspeicher|Stack]], intern durch eine Liste repräsentiert:
Wird die <tt>curry</tt>-Funktion aufgerufen, erwartet diese eine Funktion mit zwei notwendigen Parametern sowie die Parameterbelegung für den zweiten Parameter dieser Funktion. Der Rückgabewert von <tt>curry</tt> ist eine Funktion, die dasselbe tut wie <tt>func</tt> aber nur noch einen Parameter benötigt.
<syntaxhighlight lang="python">
def stack():
l = []


def pop():
Anonyme Namensräume (sog. [[Closure|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:
if not is_empty():
return l.pop()


def push(element):
<source lang="python">
l.append(element)
def stack():
l = []
def pop(): return l.pop()
def push(element): l.append(element)
def isempty(): return len(l) == 0
return pop, push, isempty
POP, PUSH, ISEMPTY = stack()
</source>


def is_empty():
Auf diese Weise erhält man die drei Funktionsobjekte <tt>POP, PUSH, ISEMPTY</tt>, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne <tt>l</tt> direkt modifizieren zu können.
return len(l) == 0


return pop, push, is_empty
=== Ausnahmebehandlung ===


pop, push, is_empty = stack()
Python nutzt ausgiebig die [[Ausnahmebehandlung]] ([[Englische Sprache|engl.]] ''exception handling'') als ein Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass es sogar möglich ist, [[Syntaxfehler]] abzufangen und zur Laufzeit zu behandeln.
</syntaxhighlight>


Auf diese Weise erhält man die drei Funktionsobjekte <code>pop</code>, <code>push</code>, <code>is_empty</code>, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne dabei auf <code>l</code> direkt zuzugreifen.
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 (Informatik)|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 Condition]]s basierende Sicherheitslücken zu vermeiden, die entstehen können, wenn Zugriffe auf bereits veralteten Statusabfragen basieren.


=== Ausnahmebehandlung ===
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:
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.&nbsp;B. Fehler-Rückgabewerte und globale Statusvariablen). Sie sind [[Thread (Informatik)|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 Condition]]s basierende Sicherheitslücken zu vermeiden, die entstehen können, wenn Zugriffe auf bereits veralteten Statusabfragen basieren.
<source lang="python">

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:
while True:
num = input("Eine ganze Zahl eingeben: ")

try:
try:
num = input("Eine Zahl eingeben: ")
num = int(num)
num = int(num)
break
except ValueError:
except ValueError:
print("Eine _Zahl_, bitte!")
print("Eine _Zahl_, bitte!")
else:
</source>
break
</syntaxhighlight>


Dieser Code wird den Benutzer so lange nach einer Nummer fragen, bis dieser eine Zeichenfolge eingibt, die sich per <tt>int()</tt> in eine Ganzzahl konvertieren lässt. Durch die Ausnahmebehandlung wird hier vermieden, dass eine Fehleingabe zu einem [[Laufzeitfehler]] führt, der das Programm zur Beendigung zwingt.
Dieses Programmstück fragt den Benutzer so lange nach einer Zahl, bis dieser eine Zeichenfolge eingibt, die sich per <code>int()</code> 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 (<tt>except KeyboardInterrupt: …</tt>).
Ebenso kann auch das hier nicht berücksichtigte [[Interrupt]]-Signal (<code>SIGINT</code>, häufig Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (<code>except KeyboardInterrupt: …</code>).


== Standardbibliothek ==
== 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]], [[Microsoft Windows|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 [[Multipurpose Internet Mail Extensions|MIME]] und [[Hypertext Transfer Protocol|HTTP]]). Module zur Schaffung grafischer Benutzeroberflächen, zur Verbindung mit [[Relationale Datenbank|relationalen Datenbanken]] und zur Manipulation [[Regulärer Ausdruck|regulärer Ausdrücke]] sind ebenfalls enthalten.
Python verfügt über eine große [[Standardbibliothek]], wodurch es sich für viele Anwendungen gut eignet.
Sie ist eine der größten Stärken von Python. Das meiste davon ist plattformunabhängig, so dass auch größere Python-Programme oft auf Unix, Windows, Mac&nbsp;OS&nbsp;X und anderen Plattformen ohne Änderung laufen.
Die Module der Standardbibliothek können mit in C oder Python selbst geschriebenen Modulen ergänzt werden.


== Grafische Benutzeroberflächen (GUI) ==
Die Standardbibliothek ist besonders auf Internet-Anwendungen zugeschnitten, mit der Unterstützung einer großen Anzahl von Standardformaten und -Protokollen (wie [[Multipurpose Internet Mail Extensions|MIME]] und [[Hypertext Transfer Protocol|HTTP]]). Module zur Schaffung grafischer Schnittstellen, zur Verbindung mit [[Relationale Datenbank|relationalen Datenbanken]] und zur Manipulation [[Regulärer Ausdruck|regulärer Ausdrücke]] sind ebenfalls enthalten.
Mit Hilfe des mitgelieferten Moduls [[Tkinter]] kann in Python (wie in Perl und [[Tcl]]) schnell eine [[grafische Benutzeroberfläche]] (GUI) mit [[Tk (Toolkit)|Tk]] erzeugt werden. Es gibt darüber hinaus eine Vielzahl von weiteren [[Wrapper (Software)|Wrappern]] von anderen Anbietern. Sie stellen Anbindungen ({{enS|language bindings}}) zu [[GUI-Toolkit]]s wie z.&nbsp;B. [[PyGTK]], [[PyQt]], [[wxPython]], [[PyObjC]] und Py[[Fast Light Toolkit|FLTK]] zur Verfügung.


Neben Tkinter wird auch ein Modul zum Zeichnen von [[Turtle-Grafik]]en mitgeliefert.
Mit Hilfe des mitgelieferten Moduls [[Tkinter]] kann in Python (wie in [[Perl (Programmiersprache)|Perl]] und [[Tcl]]) schnell eine grafische Oberfläche ([[Grafische Benutzeroberfläche|GUI]]) mit [[Tk (Toolkit)|Tk]] erzeugt werden. Es gibt darüber hinaus eine Vielzahl von weiteren [[Wrapper (Software)|Wrappern]] von anderen Anbietern. Sie stellen Anbindungen ([[Englische Sprache|engl.]] ''language bindings'') zu GUI-Bibliotheken anderer Programmiersprachen wie z.&nbsp;B. Py[[GIMP-Toolkit|GTK]], [[PyQt]], Py<b/>[[K Desktop Environment|KDE]], [[wxPython]], Py[[Cocoa|ObjC]] und PyFLTK zur Verfügung.


== Beispiel ==
=== Beispiel zum Tkinter-Modul ===
{{Hauptartikel|Tkinter}}[[Datei:Tkinter Ausgabe.png|links|mini|220x220px|Beispiel für ein einfaches Tkinter-Fenster]]
<syntaxhighlight lang="python">
from tkinter import *


fenster = Tk()
Als nicht triviales Beispiel sei hier der [[Quicksort]]-Algorithmus angegeben:
fenster.geometry("200x100")
label = Label(fenster, text="Hallo Welt!")
label.pack()


def befehl():
<source lang="python">
fenster.destroy()

button = Button(fenster, text="OK", command=befehl)
button.pack()
fenster.mainloop()
</syntaxhighlight>

==== Weitere Beispiele ====
<gallery widths="200" heights="150">
Datei:Entry-Widget.png|Text-Widget
Datei:Label-Widget Beispiel.png|Label-Widget
Datei:Der Cäsar-Verschlüsseler.png|Der Cäsar-Verschlüsseler (v1.1)
Datei:Flip a coin.png|Flip a coin (v1.3)
</gallery>

=== Beispiel zum Turtle-Grafik-Modul ===
[[Datei:Beispiel für ein Turtle-Muster.png|links|mini|Ergebnis des angegebenen Quellcodes]]
<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 ====
<gallery class="left" widths="175">
Python Kreis-Muster.png|Bunter Kreis
Python Turtle Muster Stern.png|Stern
Turtle-Programmierung.gif|Die Turtle zeichnet ein Quadrat
</gallery>

== Beispiel ==
Als nicht triviales Beispiel sei hier der kompakte Sortieralgorithmus [[Quicksort]] angegeben:

<syntaxhighlight lang="python">
def quicksort(liste):
def quicksort(liste):
if len(liste) <= 1:
if len(liste) <= 1:
return liste
return liste

pivotelement = liste.pop()
pivotelement = liste.pop()
links = [element for element in liste if element < pivotelement]
links = [element for element in liste if element < pivotelement]
rechts = [element for element in liste if element >= pivotelement]
rechts = [element for element in liste if element >= pivotelement]

return quicksort(links) + [pivotelement] + quicksort(rechts)
return quicksort(links) + [pivotelement] + quicksort(rechts)
</syntaxhighlight>
</source>


Hier ermöglicht insbesondere die Listennotation für die Variablen ''links'' und ''rechts'' eine kompakte Darstellung. Zum Vergleich eine imperative Formulierung dieser zwei Zeilen:
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 ...
<source lang="python">
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>
links, rechts = [], [] # Leere Listen links und rechts

pivotelement = liste.pop() # Das letzte Element aus der Liste nehmen
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.
for element in liste: # Die verkürzte Liste durchlaufen
if element < pivotelement:
links.append(element) # wenn < dann an linke Liste anhängen
else:
rechts.append(element) # wenn nicht < (also >=) dann an rechte Liste anhängen
...
</source>


== Interaktive Benutzung ==
== Interaktive Benutzung ==
So wie [[Lisp]], [[Ruby (Programmiersprache)|Ruby]], [[Groovy]] und [[Perl (Programmiersprache)|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 [[unixoid]]e [[Betriebssystem|Computer-Betriebssysteme]] zur Verfügung, der neben klassischen Unix-[[Kommandozeile|Shellkommandos]] auch direkte Eingaben in Python-Form verarbeiten kann. [[IPython]] ist eine populäre interaktive Python-Shell mit stark erweiterter Funktionalität.
So wie [[LISP]], [[Ruby (Programmiersprache)|Ruby]], [[Groovy]] – und [[Perl (Programmiersprache)|Perl]] im Debugger – 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, die die Sprache lernen, angenehm, sondern auch für erfahrene Programmierer: Code-Stückchen können interaktiv ausgiebig getestet werden, bevor man sie in ein geeignetes Programm aufnimmt.


== {{Anker|CPython}}Implementierungen ==
Darüber hinaus steht mit PyShell ein [[Kommandozeileninterpreter]] für verschiedene [[unixoid]]e [[Betriebssystem|Computer-Betriebssysteme]] zur Verfügung, der neben klassischen Unix-[[Kommandozeile|Shellkommandos]] auch direkte Eingaben in Python-Form verarbeiten kann.
;Interpreter:
CPython ist die ''offizielle'' oder ''Referenzimplementierung'' der Programmiersprache Python und deren [[Interpreter]].


Daneben gibt es einen in [[Java (Programmiersprache)|Java]] implementierten Python-Interpreter namens [[Jython]], mit dem die Bibliothek der [[Java-Laufzeitumgebung]] für Python verfügbar gemacht wird.
== Implementierungen ==

* [[CPython]]
;Compiler:
* [[PyPy]]
Außer den oben genannten Interpretern existieren [[Compiler]], die Python-Code in eine andere Programmiersprache übersetzen.
* [[Parrot]]

* [[Jython]] (für die [[Java Virtual Machine]])
Mit [[Cython]] kann Python-Code in effiziente C-Erweiterungen übersetzt oder externer C++- oder C-Code angebunden werden.
* [[IronPython]] (für [[.NET]])

* [[Stackless Python]]
Ebenso existiert der Compiler [[IronPython]] für die [[.Net-Framework]]- bzw. [[Mono (Software)|Mono]]-Plattform.

Um Python als Skriptsprache für Programme in [[C++]] zu nutzen, werden zumeist die [[Boost (C++-Bibliothek)|Boost]]-Python-Bibliothek oder (in neueren Projekten) Cython verwendet.

Ein Python-[[Parser]] für [[Parrot]] und ein in Python geschriebener [[Just-in-time-Kompilierung|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>{{Internetquelle |url=https://www.pyston.org/ |titel=Pyston |titelerg=Python Performance |abruf=2022-09-18}}</ref>

Außerdem existiert ein Python-Interpreter für [[Mikrocontroller]] namens [[MicroPython]].<ref>{{cite web |language=en|url=https://micropython.org/|title=MicroPython – Python for microcontrollers|work=micropython.org}}</ref>


== Entwicklungsumgebung ==
== Entwicklungsumgebung ==
Neben [[IDLE]], das oft mit Python installiert wird und hauptsächlich aus einer Textumgebung und einer [[Shell (Betriebssystem)|Shell]] besteht, wurden auch einige vollwertige [[Integrierte Entwicklungsumgebung|Entwicklungsumgebungen]] (IDEs) für Python entwickelt, beispielsweise [[Eric Python IDE]], [[Spyder (Software)|Spyder]] oder [[PyCharm]]. Weiterhin gibt es [[Plug-in]]s für größere IDEs wie [[Eclipse (IDE)|Eclipse]], [[Visual Studio]], [[IntelliJ IDEA]]<ref>{{Internetquelle|autor= |url=https://www.jetbrains.com/help/idea/plugin-overview.html |titel=Python – IntelliJ&nbsp;IDEA |werk=jetbrains.com | sprache=en |datum=2021-03-08 |abruf=2023-01-14}}</ref> und [[NetBeans IDE|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-Toolkit]]s, wie z.&nbsp;B. [[Tkinter]] ([[GUI-Builder]]), [[WxPython]] (wxGlade), [[PyQt]] ([[Qt Designer]]), PySide, [[PyGTK]] ([[Glade (Programmierwerkzeug)|Glade]]), [[Kivy]] oder [[PyFLTK]] gibt es teils eigene Editoren, mit denen sich grafische Benutzeroberflächen auf vergleichsweise einfache Art aufbauen lassen.


== Paketverwaltung ==
Es existieren einige spezielle Entwicklungsumgebungen für Python, beispielsweise [[Eric Python IDE]]. Des Weiteren existieren Plugins für größere IDEs wie [[Eclipse (IDE)|Eclipse]] und [[Netbeans]]. Texteditoren für Programmierer wie [[Vim]] und [[Emacs]] lassen sich gegebenenfalls auch für Python anpassen.
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 (Python)|pip]] oder auf alten Systemen auch ''easy_install'' eingesetzt. Paketversionen der [[Anaconda (Python-Distribution)]] werden von der [[Paketverwaltung]] ''[[Conda (Paketverwaltung)|conda]]'' verwaltet.<ref>{{Internetquelle |url=http://conda.pydata.org/docs/ |titel=Conda documentation |sprache=en |abruf=2016-02-25}}</ref>


== Verbreitung und Einsatz ==
== Verbreitung und Einsatz ==
* Python ist für die meisten gängigen Betriebssysteme frei erhältlich und eine der drei Sprachen, die häufig in einer [[LAMP]]-Umgebung eingesetzt werden. Um Python in den Webserver einzubinden, wurde [[mod_python]] entwickelt, das die Ausführung im Vergleich zu [[Common Gateway Interface|CGI]] wesentlich beschleunigt und Daten persistent speichern kann. Als Alternative stellt [[Web Server Gateway Interface|WSGI]] eine universelle Schnittstelle zwischen Webserver und Python(-Framework) zur Verfügung.
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 [[Web Server Gateway Interface|WSGI]] verwendet, welches die Nachteile von [[Common Gateway Interface|CGI]] umgeht. WSGI stellt eine universelle Schnittstelle zwischen Webserver und Python(-Framework) zur Verfügung.

** Eine Reihe von Web-Application-[[Framework]]s nutzt Python, darunter [[Django (Framework)|Django]], [[Pylons]], [[TurboGears]], [[web2py]] oder [[Zope (Webanwendungsserver)|Zope]].
Eine Reihe von Web-Application-[[Framework]]s nutzt Python, darunter [[Django (Framework)|Django]], Pylons, [[SQLAlchemy]], TurboGears, [[web2py]], [[Flask]] und [[Zope (Webanwendungsserver)|Zope]]. Ferner gibt es einen Python-Interpreter für das [[Symbian-Plattform|Symbian]]-Betriebssystem, so dass Python auf verschiedenen [[Mobiltelefon]]en verfügbar ist. In der Version 2.5.1 ist Python ein Bestandteil von [[AmigaOS]] 4.0.
* Es gibt einen in [[Java (Programmiersprache)|Java]] implementierten Python-Interpreter namens [[Jython]], mit dem die Bibliothek des [[Java Runtime Environment]]s für Python verfügbar gemacht wird.

* Ebenso existiert eine Python-Implementierung ([[IronPython]]) für die [[.NET]]- bzw. [[Mono-Projekt|Mono]]-Plattform.
=== Kommerzieller Einsatz ===
* Um Python als Skriptsprache für Programme in [[C++]] zu nutzen, setzt sich vermehrt die [[Boost (C++-Bibliothek)|Boost]].Python-Bibliothek durch.
Bekannte kommerzielle Projekte, etwa [[Google Suche]] und [[YouTube]], basieren in Teilen auf Python.<ref>[https://www.python.org/about/quotes/ ''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]]''.
* Ein Python-[[Parser]] für [[Parrot]] und ein in Python geschriebener Interpreter für Python, [[PyPy]], welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung.

* Es gibt einen Python-Interpreter für das [[Symbian]]-Betriebssystem, so dass Python auf verschiedenen [[Mobiltelefon]]en verfügbar ist.
=== In der Lehre ===
* Es existiert ein Python-Interpreter für [[Mikrocontroller]] namens PyMite.<ref>[http://wiki.python.org/moin/PyMite PyMite in der Python Wiki]</ref>
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>[https://cscircles.cemc.uwaterloo.ca/de/ Computer Science Circles] – ein kostenfreier Dienst des Centre for Education in Mathematics and Computing, University of Waterloo.</ref><ref>[https://appcamps.de/unterrichtsmaterial/programmieren-mit-python/ Programmieren lernen mit Python]. App Camps gemeinnützige Unternehmergesellschaft, Hamburg</ref><ref>[https://www.udacity.com/course/programming-for-data-science-nanodegree--nd104 Programming for Data Science with Python], Udacity</ref><ref>[https://web2-unterricht.ch/2017/09/einstieg-ins-programmieren-mit-python/ Einstieg ins Programmieren mit Python]. Web 2 Unterricht, 3. September 2017</ref><ref>[https://bildungsserver.berlin-brandenburg.de/inf-sek1-python-bb Python – die Programmiersprache für imperative und objektorientierte Programmierung]. Bildungsserver Berlin-Brandenburg</ref><ref>[https://informatik.bildung-rp.de/fortbildung/fortbildungsmaterial/programmieren-mit-python.html 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.&nbsp;B. [https://www.dorlingkindersley.de/buch/carol-vorderman-jon-woodcock-programmieren-supereasy-9783831039616 ''Programmieren supereasy – Einfacher Einstieg in Scratch und Python''.] von Carol Vorderman und Jon Woodcock, Dorling Kindersley Verlag, oder [http://python4kids.net/ Python 4 Kids] von Gregor Lingl, Mitp Verlag</ref>
* Python in der Version 2.5.1 ist Bestandteil von [[AmigaOS]] 4.0.

* Python wird im Rahmen des Projektes [[100-Dollar-Laptop]] als Standardsprache für die Benutzeroberfläche verwendet. Da der 100-Dollar-Laptop für die Schulausbildung von Kindern konzipiert ist, soll bei Benutzung der dafür gestalteten [[Grafische Benutzeroberfläche|grafischen Benutzeroberfläche]] „Sugar“ auf Knopfdruck der gerade laufende Python-[[Quellcode]] angezeigt werden.<ref>OLPC-[[Wiki]]: „[http://wiki.laptop.org/go/Python Python für den 100-Dollar-Laptop]“</ref> Damit soll Kindern die Möglichkeit gegeben werden, die dahinterliegende Informationstechnologie real zu erleben und nach Belieben „hinter die Kulissen“ zu schauen.
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 [[Grafische Benutzeroberfläche|grafischen Benutzeroberfläche]] „Sugar“ auf Knopfdruck der gerade laufende Python-[[Quellcode]] angezeigt werden.<ref>OLPC-[[Wiki]]: „[http://wiki.laptop.org/go/Python 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>{{cite web |language=en|url=https://www.elektroniknet.de/markt-technik/distribution/farnell-zeigt-den-raspberry-pi-nachwuchs-95026.html|title=Erstmals »Live on stage«: Farnell zeigt den Raspberry Pi Nachwuchs|first=Karin|last=Zühlke|publisher=}}</ref> Auch heute ist Python eine der bevorzugtesten Sprachen für den Raspberry Pi. Sein Standard-Betriebssystem [[Raspberry Pi#Raspberry Pi OS|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.&nbsp;B. wird von der Universität Waterloo in Kanada bereitgestellt. Die deutsche Version wird betrieben von den deutschen Bundesweiten Informatikwettbewerben.<ref>{{Internetquelle |url=https://cscircles.cemc.uwaterloo.ca/de/ |titel=Computer Science Circles {{!}} 01000011 01010011 01000011 |sprache=de-DE |abruf=2024-11-19}}</ref> TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.<ref>{{Webarchiv|url=https://www.tigerjython.ch/download/flyer.pdf |wayback=20210712151743 |text=Flyer TigerJython – Programmierkonzepte mit Python}} (PDF; 468&nbsp;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 [[Project Jupyter#Jupyter Notebook|Jupyter Notebooks]] genutzt.<ref>{{Internetquelle |url=https://paulromer.net/jupyter-mathematica-and-the-future-of-the-research-paper/ |titel=Jupyter, Mathematica, and the Future of the Research Paper |hrsg=paulromer.net |datum=2018-04-13 |sprache=en |abruf=2019-12-12}}</ref> Numerische Rechnungen und die visuelle Aufbereitung der Ergebnisse in Graphen werden meist mit [[NumPy]] und der [[Matplotlib]] erledigt. [[Anaconda (Python-Distribution)|Anaconda]] und [[SciPy]] bündeln viele wissenschaftliche Python-Bibliotheken und machen sie somit einfacher zugänglich. Mit [[TensorFlow]], [[Keras]], [[Scikit-learn]], [[PyTorch]] u.&nbsp;a. gibt es große Bibliotheken zur Forschung und Nutzung von [[Maschinelles Lernen|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>{{Internetquelle |autor=Benjamin Peterson |url=https://pythoninsider.blogspot.com/2020/04/python-2718-last-release-of-python-2.html |titel=Python Insider: Python 2.7.18, the last release of Python 2 |werk=Python Insider |datum=2020-04-20 |sprache=en |abruf=2022-07-12}}</ref><ref>{{Internetquelle |autor=Silke Hahn |url=https://www.heise.de/developer/meldung/Lang-lebe-Python-3-Finales-Release-besiegelt-End-of-Life-fuer-Python-2-4706247.html |titel=Programmiersprachen: Lang lebe Python 3 – finales Release von Python 2 |werk=heise online |datum=2020-04-21 |sprache=de |abruf=2022-07-12}}</ref> seit diesem Datum wird Python&nbsp;2 nicht mehr unterstützt.<ref>{{Internetquelle |url=https://www.python.org/psf/press-release/pr20191220/ |titel=Python Software Foundation: Press Release 20-Dec-2019 |sprache=en |abruf=2022-07-12}}</ref><ref>{{Internetquelle |url=https://www.golem.de/sonstiges/zustimmung/auswahl.html?from=https%3A%2F%2Fwww.golem.de%2Fnews%2Fprogrammiersprache-python-2-7-bekommt-letztes-release-im-april-2020-1912-145785.html |titel=Golem.de: IT-News für Profis |abruf=2022-07-12}}</ref> Es gibt aber vielfältige und umfangreiche Dokumentationen zum Umstieg<ref>{{Internetquelle |url=https://docs.python.org/3.7/howto/pyporting.html |titel=Porting Python 2 Code to Python 3 — Python 3.7.13 documentation |abruf=2022-07-12}}</ref><ref>{{Internetquelle |url=https://portingguide.readthedocs.io/en/latest/ |titel=The Conservative Python 3 Porting Guide — Conservative Python 3 Porting Guide 1.0 documentation |abruf=2022-07-12}}</ref><ref>{{Internetquelle |autor=Lennart Regebro |url=http://python3porting.com/bookindex.html |titel=Supporting Python 3 — Supporting Python 3: An in-depth guide |sprache=en |abruf=2022-07-12}}</ref> und auch Tools, die bei der Migration helfen<ref>{{Internetquelle |url=https://docs.python.org/2/library/2to3.html |titel=25.4. 2to3 – Automated Python 2 to 3 code translation — Python 2.7.18 documentation |abruf=2022-07-12}}</ref> oder es ermöglichen, Code zu schreiben, der mit Python&nbsp;2 und 3 funktioniert.<ref>six: [http://pypi.python.org/pypi/six/ pypi.python.org] und {{Webarchiv|url=https://pythonhosted.org/six/ |wayback=20190108200827 |text=Archivierte Kopie}}</ref><ref>{{Internetquelle |url=https://python-modernize.readthedocs.io/en/latest/ |titel=Python-Modernize — modernize 0.6.1 documentation |abruf=2022-07-12}}</ref><ref>{{Internetquelle |url=https://python-future.org/ |titel=Easy, clean, reliable Python 2/3 compatibility — Python-Future documentation |abruf=2022-07-12}}</ref><ref>{{Internetquelle |autor=Victor Stinner |url=https://github.com/vstinner/sixer |titel=sixer: Add Python 3 support to Python 2 applications using the six module. |abruf=2022-07-12}}</ref><ref>{{Internetquelle |autor=limodou |url=https://github.com/limodou/2to6 |titel=2to6 |datum=2019-06-25 |abruf=2022-07-12}}</ref>


== Kritik ==
== 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>{{Internetquelle |url=https://www.oreilly.com/pub/au/3082 |titel=A. M. Kuchling |sprache=en |abruf=2020-09-01}}</ref>, als unelegant und nicht objektorientiert empfunden.<ref name="KuchlingWarts">{{Webarchiv |url=http://www.amk.ca/python/writing/warts.html |text=amk.ca |wayback=20031002184114}}</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: [http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html 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&nbsp;3.0 wurde dieser Kritikpunkt behoben.<ref>{{cite web |language=en|url=https://www.python.org/dev/peps/pep-3135/|title=PEP 3135 – New Super|work=Python.org}}</ref>
* Bei der Definition (aber nicht beim Aufruf) von Methoden muss der Parameter ''self'', der dem Objekt entspricht, dessen Methode aufgerufen wird, explizit angegeben werden. Dies wird oft als unelegant und „nicht objektorientiert“ empfunden.<ref name="KuchlingWarts">http://web.archive.org/web/20031002184114/www.amk.ca/python/writing/warts.html</ref> Es ist aber nötig, um bestimmte wichtige Konstrukte zu ermöglichen.<ref>Guido van Rossum: [http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html Why explicit self has to stay]</ref>
* Die Art, wie Python zwischen so genannten „veränderlichen“ (mutable) und „unveränderlichen“ (immutable) Datentypen unterscheidet, kann für Neulinge zu überraschendem Verhalten führen.<ref name="Fixing mutable default argument values">http://mail.python.org/pipermail/python-ideas/2007-January/000073.html</ref>
* In einer Methodendefinition erfordert der Aufruf der Basisklassenversion derselben Methode die explizite Angabe der Klasse und Instanz. Dies wird als Verletzung des DRY (Don't Repeat Yourself)-Prinzips gesehen und behindert Umbenennungen (dies wurde in Python&nbsp;3.0 behoben<ref>http://www.python.org/dev/peps/pep-3135/</ref>).
* Einige in anderen Sprachen gebräuchliche Kontrollstrukturen, wie do/while<ref name="KuchlingWarts" />, sind in Python nicht vorhanden und müssen auf andere Weise realisiert werden (z.&nbsp;B. durch „while&nbsp;True:&nbsp;…&nbsp;break“).
* Auf [[Multiprozessor]]-Systemen behindert der sogenannte ''Global Interpreter Lock'' (GIL) von [[CPython]] die Effizienz von Python-Anwendungen, die [[Multithreading (softwareseitig)|Multithreading]] benutzen.<ref>http://blog.snaplogic.org/?p=94</ref> (Diese Beschränkung existiert unter [[Jython]] oder [[IronPython]] nicht.) Es ist nicht geplant, den GIL zu ersetzen. Stattdessen wird empfohlen, statt Threads mehrere miteinander kommunizierende Prozesse zu verwenden.<ref>http://www.python.org/doc/faq/library/#can-t-we-get-rid-of-the-global-interpreter-lock</ref><ref>http://www.artima.com/weblogs/viewpost.jsp?thread=214235</ref>
* In den aktuell vorherrschenden Implementationen ist die Geschwindigkeit niedriger als bei vielen kompilierbaren Sprachen<ref name="shootout-c">[http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=python&lang2=gcc&box=1 Python–C]</ref>, aber ähnlich wie bei [[Perl (Programmiersprache)|Perl]]<ref name="shootout-perl">[http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=python&lang2=perl Python–Perl]</ref>, [[PHP]]<ref name="shootout-php">[http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=python&lang2=php Benchmark-Vergleich Python–PHP]</ref> oder [[Smalltalk-80 (Programmiersprache)|Smalltalk]]<ref name="shootout-php">[http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=python&lang2=vw Benchmark-Vergleich Python–Smalltalk]</ref> und höher als bei [[Ruby (Programmiersprache)|Ruby]].<ref name="shootout-ruby">[http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=python&lang2=ruby Benchmark-Vergleich Python–Ruby]</ref> Das ist zum Teil gewollt: Bei der Entwicklung von CPython geht Klarheit vor Performanz.<ref>[http://www.python.org/dev/culture/ Python Culture]</ref> Dabei beruft man sich auf Autoritäten wie [[Donald Knuth]] und [[Tony Hoare]], die von verfrühter Optimierung abraten. Wenn Performanzprobleme auftreten, die nicht durch Optimierung des Python-Codes gelöst werden können<ref>[http://www.python.org/doc/essays/list2str.html Python Patterns – An Optimization Anecdote]</ref>, setzt man einen [[Just-in-time-Compilierung|JIT]]-Compiler wie [[Psyco]] ein oder lagert zeitkritische Funktionen in maschinennähere Sprachen wie C aus.


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>{{Internetquelle |autor=heise online |url=https://www.heise.de/news/Python-3-13-Endlich-effizienteres-Multithreading-ohne-Global-Interpreter-Lock-9655663.html |titel=Python 3.13: Endlich effizienteres Multithreading ohne Global Interpreter Lock |datum=2024-03-15 |sprache=de |abruf=2024-05-21}}</ref> Alternativ wird empfohlen, mehrere miteinander kommunizierende Prozesse anstelle von Threads zu verwenden.<ref>{{cite web |language=en|url=https://www.python.org/doc/faq/library/#can-t-we-get-rid-of-the-global-interpreter-lock|title=Library and Extension FAQ — Python 3.7.0 documentation|work=Python.org}}</ref><ref>{{cite web |language=en|url=http://www.artima.com/weblogs/viewpost.jsp?thread=214235|title=It isn’t Easy to Remove the GIL|first=Guido van van|last=Rossum|work=Artima.com}}</ref>
== Einzelnachweise ==

<references />
In den vorherrschenden Implementationen ist die Ausführungsgeschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,<ref name="shootout-c">{{cite web |language=en|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=gpp|title=Python–C|publisher=|accessdate=2015-12-25|archiveurl=https://web.archive.org/web/20151226032243/http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=gpp|archivedate=2015-12-26|offline=yes}}</ref> aber ähnlich wie bei [[Perl (Programmiersprache)|Perl]],<ref name="shootout-perl">{{cite web |language=en|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=perl|title=Python–Perl|publisher=|accessdate=2015-12-25|archiveurl=https://web.archive.org/web/20151226032244/http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=perl|archivedate=2015-12-26|offline=yes}}</ref> [[PHP]],<ref name="shootout-php-1">{{cite web |language=en|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=php|title=Benchmark-Vergleich Python–PHP|publisher=|accessdate=2015-12-25|archiveurl=https://web.archive.org/web/20151226030041/http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=php|archivedate=2015-12-26|offline=yes}}</ref> [[Dart (Programmiersprache)|Dart]]<ref name="shootout-php-2">{{cite web |language=en|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=dart|title=Benchmark-Vergleich Python–Dart|publisher=|accessdate=2015-12-25|archiveurl=https://web.archive.org/web/20151226024423/http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=dart|archivedate=2015-12-26|offline=yes}}</ref> und [[Ruby (Programmiersprache)|Ruby]].<ref name="shootout-ruby">{{cite web |language=en|url=http://benchmarksgame.alioth.debian.org/u64q/ruby.html|title=Benchmark-Vergleich Python–Ruby|publisher=|accessdate=2015-12-25|archiveurl=https://web.archive.org/web/20151226032247/http://benchmarksgame.alioth.debian.org/u64q/ruby.html|archivedate=2015-12-26}}</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>{{Internetquelle |url=http://www.etsimo.uniovi.es/python/dev/culture/ |titel=Python Culture |sprache=en |archiv-url=https://web.archive.org/web/20091228092458/http://www.etsimo.uniovi.es/python/dev/culture/ |archiv-datum=2009-12-28 |abruf=2009-12-23}}</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>{{cite web |language=en|url=https://www.python.org/doc/essays/list2str/|title=Python Patterns – An Optimization Anecdote|work=Python.org}}</ref> werden stattdessen [[Just-in-time-Kompilierung|JIT]]-Compiler wie [[PyPy]] verwendet oder zeitkritische Funktionen in maschinennähere Sprachen wie [[C (Programmiersprache)|C]] oder [[Cython]] ausgelagert.


== Literatur ==
== Literatur ==
=== Für den Einstieg ===
'''Für den Einstieg'''
* {{Literatur
* Hans Petter Langtangen: [http://www.springer.com/978-3-642-02474-0/ ''A Primer on Scientific Programming with Python.''] Springer 2009. ISBN 978-3-642-02474-0
|Autor=Allen B. Downey
* Mark Pilgrim: [http://diveintopython.org/ ''Dive Into Python.''] Springer, New York 2004. ISBN 1-59059-356-1 (Download verfügbar)
|Titel=Programmieren lernen mit Python
* Mark Pilgrim: [http://diveintopython3.org/ ''Dive Into Python 3.''] Springer, New York 2009. ISBN 1-43022-415-0 (Download verfügbar)
|Auflage=2.
* Mark Pilgrim, Florian Wollenschein: [http://www.python3-intensivkurs.de ''Python 3 - Intensivkurs''] Springer, Berlin 2010. ISBN 978-3-642-04376-5 (Deutsche Übersetzung von Dive Into Python 3)
|Verlag=O’Reilly
* C H.Swaroop: [http://abop-german.berlios.de/ ''A byte of Python''.] (Download verfügbar)
|Ort=Köln (u.&nbsp;a.)
* Thomas Theis: ''Einstieg in Python.'' Galileo Press, Bonn 2002. ISBN 3-89842-227-5
|Datum=2014
* Thomas Theis: ''Einstieg in Python 3'' Galileo Press Bonn 2009. ISBN 978-38362-1406-3
|ISBN=978-3-95561-806-3
* Mark Lutz, David Ascher: ''Einführung in Python.'' O’Reilly, Cambridge 2000. ISBN 3-89721-129-7
|Seiten=297
* Martin Uzák: ''Python 2.x. Das Einsteigerseminar.'' bhv, Bonn 2002. ISBN 3-8266-7206-2
|Übersetzer=Stefan Fröhlich}}
* Peter Walerowski: ''Python - Grundlagen und Praxis.'' Addison-Wesley, München 2008. ISBN 3-8273-2517-X
* {{Literatur
* Ivan van Laningham: ''Jetzt lerne ich Python.'' Markt+Technik, München 2000. ISBN 3-8272-5843-X
|Autor=Bernd Klein
|Titel=Einführung in Python 3. Für Ein- und Umsteiger
|Auflage=4., vollst. überarb.
|Verlag=Hanser
|Ort=München
|Datum=2021
|ISBN=978-3-446-46379-0
|Seiten=600
|Online=[https://d-nb.info/1233374958/04 Inhaltsverzeichnis]}}
* {{Literatur
|Autor=Thomas Theis
|Titel=Einstieg in Python. Ideal für Programmieranfänger geeignet
|Auflage=8.
|Verlag=Rheinwerk Computing
|Ort=Bonn
|Datum=2024
|ISBN=978-3-367-10123-8
|Seiten=484
|Online=[https://d-nb.info/1312661534/04 Inhaltsverzeichnis]}}
* {{Literatur
|Autor=Mark Lutz
|Titel=Learning Python
|Auflage=6.
|Verlag=O’Reilly
|Ort=Sebastopol (u.&nbsp;a.)
|Datum=2025
|ISBN=978-1-09-817130-8
|Seiten=1128}}
* Hans Petter Langtangen: [http://www.springer.com/978-3-662-49886-6/ ''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<br />(Deutsche Übersetzung von ''Dive Into Python 3'' [http://books.google.de/books?id=Va-HxHRndAUC&printsec=frontcover&dq=Python+3++Intensivkurs++Projekte+erfolgreich+realisieren&hl=de&ei=jEwfTeO2OMKDOuzP_f0I&sa=X&oi=book_result&ct=result&resnum=1&ved=0CCsQ6AEwAA#v=onepage&q&f=false google-books])
* Mark Pilgrim: ''Dive Into Python 3''. 2. Auflage. Springer, 2009, ISBN 1-4302-2415-0 ([http://www.diveintopython3.net/ Download verfügbar])
* {{Literatur
|Autor=John Paul Mueller
|Titel=Python programmieren lernen für Dummies
|Auflage=2.
|Verlag=Wiley
|Ort=Weinheim
|Datum=2018
|ISBN=978-3-527-71490-2
|Seiten=407
|Online=[https://d-nb.info/1156799929/04 bei der Deutschen Nationalbibliothek]}}
* {{Literatur
|Hrsg=Martina Glöde
|Titel=Programmieren supereasy. Einfacher Einstieg in Scratch und Python
|Verlag=Dorling Kindersley
|Ort=München
|Datum=2020
|ISBN=978-3-8310-3961-6
|Seiten=224
|Übersetzer=Birgit Reit}}
* {{Literatur
|Autor=Warren D. Sande; Carter Sande
|Titel=Hello World! Programmieren für Kids und andere Anfänger
|Auflage=2., akt. u. erw.
|Verlag=Hanser
|Ort=München
|Datum=2014
|ISBN=978-3-446-43806-4
|Seiten=475
|Übersetzer=Jürgen Dubau}}
* 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 ===
'''Referenzen'''
* {{Literatur
* Martin von Löwis, Nils Fischbeck: ''Python 2 – Einführung und Referenz der objektorientierten Skriptsprache'', Addison-Wesley, ISBN 3-8273-1691-X
|Autor=Michael Weigend
* Michael Weigend: ''Python GE-PACKT.'', mitp-Verlag, ISBN 3-8266-0724-4
|Titel=Python ge-packt
* Michael Lauer: ''Python und GUI-Toolkits'', mitp-Verlag, ISBN 3-8266-0844-5
|Auflage=8.
|Verlag=mitp
|Ort=Frechen
|Datum=2020
|ISBN=978-3-7475-0194-8
|Seiten=656}}
* {{Literatur
|Autor=Johannes Ernesti; Peter Kaiser
|Titel=Python 3. Das umfassende Handbuch
|Auflage=7., aktualisierte Auflage
|Verlag=Rheinwerk
|Ort=Bonn
|Datum=2023
|ISBN=978-3-8362-9129-3
|Seiten=
|Kommentar=OpenBook beim Verlag (5. Auflage)
|Online=http://openbook.rheinwerk-verlag.de/python/index.html}}
* {{Literatur
|Autor=Mark Lutz
|Titel=Python. Kurz & gut
|Auflage=5.
|Verlag=O’Reilly
|Ort=Köln u.&nbsp;a.
|Datum=2014
|ISBN=978-3-95561-770-7
|Seiten=270}}


=== Weiterführendes ===
'''Weiterführendes'''
* {{Literatur
* Peter Kaiser, Johannes Ernesti: [http://www.galileocomputing.de/openbook/python/ ''Python - Das umfassende Handbuch - Aktuell zu Python 2.5''], Galileo Press, ISBN 978-3-8362-1110-9, Download verfügbar
|Autor=Luciano Ramalho
* Farid Hajji: ''Das Python-Praxisbuch'', Addison-Wesley, ISBN 978-3-8273-2543-3
|Titel=Fluent Python. Clear, concise, and effective programming
* Stefan Schwarzer: ''Python Workshop'', Addison-Wesley, ISBN 3-8273-1880-7
|Auflage=2.
* Michael Weigend: ''Objektorientierte Programmierung mit Python'', mitp-Verlag, ISBN 3-8266-0966-2
|Verlag=O’Reilly
* Hans P. Langtangen: ''Python Scripting for Computational Science'', Springer, ISBN 3-540-43508-5
|Ort=Sebastopol CA u.&nbsp;a.
* Thomas W. Christopher: ''Python Programming Patterns'', Prentice Hall, ISBN 0-13-040956-1
|Datum=2022
* Gregor Lingl: ''Python für Kids'', mitp-Verlag, ISBN 3-8266-0951-4
|ISBN=978-1-4920-5635-5
* Jason R. Briggs: [http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/ Snake Wrangling for Kids – Learning to Program with Python, engl.]. Für achtjährige und ältere Kinder, [[Creative Commons|Creative Commons Lizenz]].
|Seiten=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.
* {{Literatur
|Autor=Felix Bittmann
|Titel=Praxishandbuch Python 3. Konzepte der Programmierung verstehen und anwenden
|Auflage=1.
|Verlag=[[Books on Demand]]
|Ort=Norderstedt
|Datum=2020
|ISBN=978-3-7519-0058-4
|Seiten=240
|Online=[https://www.bod.de/booksample?json=http%3A%2F%2Fwww.bod.de%2Fgetjson.php%3Fobjk_id%3D3088612%26hash%3Dc7f93fc149a3fb3c3f93e527763ece0c Inhaltsverzeichnis]}}


== Weblinks ==
== Weblinks ==

{{Commonscat|Python (programming language)|Python}}
{{Commonscat|Python (programming language)|Python}}
{{Wikiversity|Kurs:Python|Kurs:Python}}
{{Wikibooks|Python unter Linux|Python 2 unter Linux}}
* [https://www.python.org/ Offizielle Website] (englisch)
{{Wikibooks|Python-Programmierung}}


=== Tutorials ===
* [http://www.python.org www.python.org] (englisch)
==== Für Anfänger ====
* [http://tutorial.pocoo.org/ Übersetzung des offiziellen Tutorials zur Version 3.1]
* [https://pythonexamples.org/ Python Examples] (englisch)
* [http://www.linux-user.de/ausgabe/2006/09/080-python-1/ Kurs&nbsp;–&nbsp;Einstieg in Python]
* [https://www.python-kurs.eu/index.php Online-Kurse und Tutorials für Python 2 und 3.] Python-Kurs.eu
* [http://www.linuxjournal.com/article/3882 Eric S. Raymond über seine Erfahrungen mit Python] (englisch)
* [https://cscircles.cemc.uwaterloo.ca/using-website-de/ Online-Kurs.] [[University of Waterloo]] (deutsch, englisch, französisch)
* [http://www.poromenos.org/tutorials/python Kurzeinführung „Learn Python in 10 minutes“] (englisch)
* [https://automatetheboringstuff.com/ Practical programming for total beginners.] Automate the Boring Stuff with Python (englisch)
* [http://www.sunjy.de/python/index.html Python Tutorial für Anfänger inkl. Objektorientierung und Threads]
* [https://www.informatik-aktuell.de/entwicklung/programmiersprachen/einstieg-in-python.html Einstieg in Python], Michael Weigend (deutsch)
* [http://abop-german.berlios.de/ A Byte of Python - Umfangreiches und für Einsteiger geeignetes Python Tutorial] (deutsch)
* [https://www.informatik-aktuell.de/entwicklung/programmiersprachen/python-eine-schicke-oberflaeche-fuer-intelligente-skripte.html Python: Grafische Benutzeroberflächen für Python-Skripte erstellen], Veikko Krypczyk (deutsch)


==== Für Fortgeschrittene ====
[[Kategorie:Programmiersprache Python| ]]
* PythonProgramming.net: [https://pythonprogramming.net/ Python-Tutorials für Data analysis, Machine learning & GUIs] (englisch)
* PyData: [https://www.youtube.com/user/PyDataTV/ Python-Vorträge und -Tutorials für Data analysis, Machine learning etc.] (englisch)
* Awesome Python: [https://awesome-python.com/ Liste von Frameworks, Bibliotheken und Ressourcen, nach Themen gegliedert] (englisch)
* Python 3 – Das umfassende Handbuch: [https://openbook.rheinwerk-verlag.de/python/ Rheinwerk openbook zu Python 3] (deutsch)

==== Für Kinder ====
* [https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Python/Snake%20Wrangling%20for%20Kids%20-%20Learning%20to%20Program%20with%20Python%203%2C%20win-v0.7.7%20(2007).pdf Snake Wrangling for Kids – Learning to Program with Python] von Jason R. Briggs, für Kinder ab acht Jahren (englisch)
* [https://biologie-lernprogramme.de/daten/media/swfk-de-win-2012-02.pdf Schlangengerangel für Kinder – Programmieren Lernen für Kinder] (PDF; 2,1&nbsp;MB) für Kinder ab acht Jahren (deutsch)

== Einzelnachweise ==
<references responsive>
<ref name="Zen">
{{Internetquelle
|autor=Tim Peters
|url=http://legacy.python.org/dev/peps/pep-0020/
|titel=The Zen of Python
|hrsg=Python Software Foundation
|datum=2004-08-19
|sprache=en
|abruf=2014-08-12}}
</ref>
</references>

{{Gesprochene Version
|datei = Python (Programmiersprache).ogg
|länge = 20.30 min
|größe = 13,0 MB
|version = 68824020
|datum = 2010-01-05
}}


{{Lesenswert}}
{{Lesenswert|23. Oktober 2005|10220285}}


{{Normdaten|TYP=s|GND=4434275-5|LCCN=sh96008834}}
{{Link GA|en}}
{{Link FA|ru}}


[[af:Python]]
[[Kategorie:Python (Programmiersprache)| ]]
[[Kategorie:Skriptsprache]]
[[an:Python]]
[[Kategorie:Objektorientierte Programmiersprache]]
[[ar:بايثون]]
[[Kategorie:Imperative Programmiersprache]]
[[az:Python]]
[[Kategorie:Funktionale Programmiersprache]]
[[bg:Python]]
[[bs:Python programski jezik]]
[[bug:Python]]
[[ca:Python]]
[[cs:Python]]
[[da:Python (programmeringssprog)]]
[[el:Python]]
[[en:Python (programming language)]]
[[eo:Python (programlingvo)]]
[[es:Python]]
[[et:Python (programmeerimiskeel)]]
[[eu:Python]]
[[fa:زبان برنامه‌نویسی پایتون]]
[[fi:Python]]
[[fr:Python (langage)]]
[[gl:Python]]
[[he:Python]]
[[hu:Python (programozási nyelv)]]
[[ia:Python (linguage de programmation)]]
[[id:Python (bahasa pemrograman)]]
[[is:Python (forritunarmál)]]
[[it:Python]]
[[ja:Python]]
[[jbo:paiton]]
[[ka:პითონი (პროგრამირების ენა)]]
[[ko:파이썬]]
[[la:Python]]
[[lt:Python]]
[[lv:Python]]
[[ml:പൈത്തണ്‍ (പ്രോഗ്രാമിങ്ങ് ഭാഷ)]]
[[ms:Python]]
[[ne:पाइथन प्रोग्रामिङ्ग भाषा]]
[[nl:Python (programmeertaal)]]
[[no:Python]]
[[pl:Python]]
[[pt:Python]]
[[ro:Python]]
[[ru:Python]]
[[sh:Python programski jezik]]
[[simple:Python (programming language)]]
[[sk:Python (programovací jazyk)]]
[[sl:Python (programski jezik)]]
[[sq:Python]]
[[sr:Пајтон (програмски језик)]]
[[sv:Python (programspråk)]]
[[ta:பைத்தோன்]]
[[te:పైథాన్ (కంప్యూటర్ భాష)]]
[[th:ภาษาไพทอน]]
[[tr:Python (programlama dili)]]
[[uk:Python]]
[[vi:Python (ngôn ngữ lập trình)]]
[[zh:Python]]

Aktuelle Version vom 17. April 2025, 02:05 Uhr

Python
Logo
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]
Aktuelle Version 3.13.2[3] (4. Februar 2025)
Typisierung: stark, dynamisch („Duck-Typing“)
Wichtige Implementierungen: CPython, Jython, IronPython, PyPy
Beeinflusst von: ABC[4], Algol 68[5], Modula-3[6], C[7], C++[6], Perl, Java[8], Lisp[9], Haskell[10], APL[11], CLU, Dylan, ICON, Standard ML[11]
Beeinflusste: Ruby, Cython
Betriebssystem: Plattformunabhängig[12]
Lizenz: Python Software Foundation License[13]
www.python.org

Python ([ˈpʰaɪθn̩], [ˈpʰaɪθɑn], auf Deutsch auch [ˈpʰyːtɔn]) ist eine universell nutzbare, üblicherweise interpretierte, höhere Programmiersprache.[14] Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern.[15] 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

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

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

Der Name geht nicht, wie das Logo vermuten 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.[16] Trotzdem etablierte sich die Assoziation zur Schlange, was sich unter anderem in der Programmiersprache Cobra[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ähige Garbage Collection (automatische Speicherbereinigung) und die Unterstützung für den Unicode-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 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).

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

Datentypen und Strukturen

[Bearbeiten | Quelltext bearbeiten]
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.[55]

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.

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.

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):
    • forelse zur Iteration über die Elemente einer Sequenz
    • whileelse zur Wiederholung, solange ein Ausdruck den Boolean-Wert True hat
  • Verzweigungen (bedingte Ausführung):
    • ifelifelse für bedingte Verzweigungen
    • matchcaseif für strukturiertes Pattern Matching
  • Exceptions (Ausführung im Fehlerfall):
    • tryexceptelsefinally für Ausnahmebehandlungen
    • with zum 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

[Bearbeiten | Quelltext bearbeiten]

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

Hierzu als Beispiel die Berechnung der Fakultät einer Ganzzahl, einmal in C und einmal in Python:

Fakultätsfunktion in C:

int factorial(int x) {
    if (x <= 1) {
        return 1;
    }

    return x * factorial(x - 1);
}

Die gleiche Funktion in Python:

def factorial(x):
    if x <= 1:
        return 1

    return x * factorial(x - 1)

Es ist jedoch darauf zu achten, die Einrückungen im gesamten Programmtext gleich zu gestalten. Die gemischte Verwendung von Leerzeichen und Tabulatorzeichen kann zu Problemen führen, da der Python-Interpreter Tabulatoren im Abstand von acht Leerzeichen annimmt. Je nach Konfiguration des Editors können Tabulatoren optisch mit weniger als acht Leerzeichen dargestellt werden, was zu Syntaxfehlern oder ungewollter Programmstrukturierung führen kann. Als vorbeugende Maßnahme kann man den Editor Tabulatorzeichen durch eine feste Anzahl von Leerzeichen ersetzen lassen. Die Python-Distribution enthält in der Standardbibliothek das Modul tabnanny, welches die Vermischung von Tabulator- und Leerzeichen zu erkennen und beheben hilft.

Man kann die Fakultätsfunktion aber auch wie in C einzeilig mit ternärem Operator formulieren:

Die Fakultätsfunktion in C:

int factorial(int x) {
    return x <= 1 ? 1 : x * factorial(x - 1);
}

Die Fakultätsfunktion in Python:

def factorial(x):
    return 1 if x <= 1 else x * factorial(x - 1)

Funktionales Programmieren

[Bearbeiten | Quelltext bearbeiten]

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:

zahlen = [1, 2, 3, 4, 5]
zweierpotenzen = [2 ** n for n in zahlen]

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

Pythons Schlüsselwort lambda könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solche lambda-Blöcke in Python können nur Ausdrücke enthalten, aber keine Anweisungen. Damit werden solche Anweisungen generell nicht verwendet, um eine Funktion zurückzugeben. Die übliche Vorgehensweise ist stattdessen, den Namen einer lokalen Funktion zurückzugeben. Das folgende Beispiel zeigt dies anhand einer einfachen Funktion nach den Ideen von Haskell Brooks Curry:

def add_and_print_maker(x):
    def temp(y):
        print(f'{x} + {y} = {x + y}')

    return temp

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

def curry(func, known_argument):
    return lambda unknown_argument: func(unknown_argument, known_argument)

Wird die curry-Funktion aufgerufen, erwartet diese eine Funktion mit zwei notwendigen Parametern sowie die Parameterbelegung für den zweiten Parameter dieser Funktion. Der Rückgabewert von curry ist eine Funktion, die das Gleiche tut wie func, aber nur noch einen Parameter benötigt.

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

def stack():
    l = []

    def pop():
        if not is_empty():
            return l.pop()

    def push(element):
        l.append(element)

    def is_empty():
        return len(l) == 0

    return pop, push, is_empty

pop, push, is_empty = stack()

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

Ausnahmebehandlung

[Bearbeiten | Quelltext bearbeiten]

Python nutzt ausgiebig die Ausnahmebehandlung (englisch exception handling) als ein Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass es teilweise sogar möglich ist, Syntaxfehler abzufangen und zur Laufzeit zu behandeln.

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

Der Python-Ansatz legt den Einsatz von Ausnahmen nahe, wann immer eine Fehlerbedingung entstehen könnte. Nützlich ist dieses Prinzip beispielsweise bei der Konstruktion robuster Eingabeaufforderungen:

while True:
    num = input("Eine ganze Zahl eingeben: ")

    try:
        num = int(num)
    except ValueError:
        print("Eine _Zahl_, bitte!")
    else:
        break

Dieses Programmstück fragt den Benutzer so lange nach einer Zahl, bis dieser eine Zeichenfolge eingibt, die sich per int() in eine Ganzzahl konvertieren lässt. Durch die Ausnahmebehandlung wird hier vermieden, dass eine Fehleingabe zu einem Laufzeitfehler führt, der das Programm zum Abbruch zwingt.

Ebenso kann auch das hier nicht berücksichtigte Interrupt-Signal (SIGINT, häufig Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (except KeyboardInterrupt: …).

Standardbibliothek

[Bearbeiten | Quelltext bearbeiten]

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)

[Bearbeiten | Quelltext bearbeiten]

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

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

Beispiel zum Tkinter-Modul

[Bearbeiten | Quelltext bearbeiten]
Beispiel für ein einfaches Tkinter-Fenster
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()

Weitere Beispiele

[Bearbeiten | Quelltext bearbeiten]

Beispiel zum Turtle-Grafik-Modul

[Bearbeiten | Quelltext bearbeiten]
Ergebnis des angegebenen Quellcodes
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

Weitere Grafiken

[Bearbeiten | Quelltext bearbeiten]

Als nicht triviales Beispiel sei hier der kompakte Sortieralgorithmus Quicksort angegeben:

def quicksort(liste):
    if len(liste) <= 1:
        return liste

    pivotelement = liste.pop()
    links  = [element for element in liste if element < pivotelement]
    rechts = [element for element in liste if element >= pivotelement]

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

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

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

    for element in liste:           # die restlichen Elemente der Liste durchlaufen ...
        if element < pivotelement:  # ... und mit dem Pivot-Element vergleichen
            links.append(element)   # wenn kleiner, dann an linke Liste anhängen
        else:
            rechts.append(element)  # ansonsten, wenn nicht kleiner, dann an rechte Liste anhängen
...

Dies ist nur ein Beispiel für die gesparte Schreibarbeit durch die Listennotation. Tatsächlich ist in diesem Fall die iterative Formulierung die schnellere, da pro Durchgang nur einmal über das Feld „liste“ iteriert wird und nicht zweimal wie in der Listennotation.

Interaktive Benutzung

[Bearbeiten | Quelltext bearbeiten]

So wie Lisp, Ruby, Groovy und Perl unterstützt der Python-Interpreter auch einen interaktiven Modus, in dem Ausdrücke am Terminal eingegeben und die Ergebnisse sofort betrachtet werden können. Das ist nicht nur für Neulinge angenehm, die die Sprache lernen, sondern auch für erfahrene Programmierer: Code-Stückchen können interaktiv ausgiebig getestet werden, bevor man sie in ein geeignetes Programm aufnimmt.

Darüber hinaus steht mit Python Shell ein Kommandozeileninterpreter für verschiedene unixoide Computer-Betriebssysteme zur Verfügung, der neben klassischen Unix-Shellkommandos auch direkte Eingaben in Python-Form verarbeiten kann. IPython ist eine populäre interaktive Python-Shell mit stark erweiterter Funktionalität.

Implementierungen

[Bearbeiten | Quelltext bearbeiten]
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.[58]

Außerdem existiert ein Python-Interpreter für Mikrocontroller namens MicroPython.[59]

Entwicklungsumgebung

[Bearbeiten | Quelltext bearbeiten]

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[60] 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

[Bearbeiten | Quelltext bearbeiten]

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

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

[Bearbeiten | Quelltext bearbeiten]

Bekannte kommerzielle Projekte, etwa Google Suche und YouTube, basieren in Teilen auf Python.[62] Auch in der Spieleindustrie findet die Sprache bisweilen Einsatz, etwa in EVE Online, World in Conflict und Civilization 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.[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 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.[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-Computer Raspberry Pi (Python Interpreter) sollte ursprünglich mit einem im ROM integrierten Python-Interpreter ausgeliefert werden.[71] 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.[72] TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.[73]

In der Wissenschaft

[Bearbeiten | Quelltext bearbeiten]

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

[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;[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 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[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]

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.[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 bei Perl,[97] PHP,[98] Dart[99] und Ruby.[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 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,[102] werden stattdessen JIT-Compiler wie PyPy verwendet oder zeitkritische Funktionen in maschinennähere Sprachen wie C oder Cython ausgelagert.

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]

Einzelnachweise

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