Änderungen

Wechseln zu: Navigation, Suche

Python (Programmiersprache)

43.138 Bytes hinzugefügt, 10:59, 5. Mai 2018
Die Seite wurde neu angelegt: „{{Infobox Programmiersprache | Name = Python | Logo = 230px|Logo | Beschreibung = | Paradigma = multiparadigmatisch | E…“
{{Infobox Programmiersprache
| Name = Python
| Logo = [[Datei:Python logo and wordmark.svg|230px|Logo]]
| Beschreibung =
| Paradigma = multiparadigmatisch
| Erscheinungsjahr = 1991
| Designer =
| Entwickler = Python Software Foundation
| AktuelleVersion = 3.6.5 <small>({{Datum|28|03|2018}})</small>,<br />2.7.15
| AktuelleVersionFreigabeDatum = {{Datum|01|05|2018}}
| AktuelleVorabVersion =
| AktuelleVorabVersionFreigabeDatum =
| Typisierung = [[Starke Typisierung|stark]], [[Dynamische Typisierung|dynamisch]] („[[Duck-Typing]]“)
| Implementierung = [[CPython]], [[Jython]], [[IronPython]], [[PyPy]]
| Dialekte =
| Standardisierungen =
| Beeinflusst_von = [[ABC (Programmiersprache)|ABC]], [[Algol 68]], [[Modula-3]], [[Icon (Programmiersprache)|Icon]], [[C (Programmiersprache)|C]], [[C++]], [[Perl (Programmiersprache)|Perl]], [[Java (Programmiersprache)|Java]], [[Lisp]], [[Haskell (Programmiersprache)|Haskell]]
| Beeinflusste = [[Ruby (Programmiersprache)|Ruby]], [[Boo (Programmiersprache)|Boo]], [[Groovy]], [[Cython]], [[JavaScript]], [[Swift (Programmiersprache)|Swift]]
| Betriebssystem =
| Lizenz = [[Python Software Foundation#Python-Software-Foundation-Lizenz|Python-Software-Foundation-Lizenz]]<ref>[https://www.python.org/psf/license/ Python License]</ref>
| Website = [https://www.python.org/ www.python.org]
}}

'''Python''' ([{{IPA|ˈpaɪθn̩}}], [{{IPA|ˈpaɪθɑn}}], auf Deutsch auch [{{IPA|ˈpyːtɔn}}]) ist eine universelle, üblicherweise [[Interpreter|interpretierte]] [[höhere Programmiersprache]].<ref>{{cite web |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 | 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. Wegen ihrer klaren und übersichtlichen Syntax gilt Python als einfach zu erlernen.

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 hat ein offenes, gemeinschaftsbasiertes Entwicklungsmodell, das durch die gemeinnützige [[Python Software Foundation]], die ''[[de facto]]'' die Definition der Sprache in der Referenzumsetzung [[CPython]] pflegt, gestützt wird.

== 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 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 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>[https://www.python.org/doc/faq/general/#why-is-it-called-python Offizielle Python FAQ], sowie {{Webarchiv|text=Python Tutorial, Kapitel 1 |url=http://docs.python.org/tut/node3.html |wayback=20060827005330 |archiv-bot=2018-03-25 20:02:31 InternetArchiveBot }}</ref> Trotzdem etablierte sich die [[Assoziation (Psychologie)|Assoziation]] zur Schlange, was sich unter anderem in der Programmiersprache [[Cobra (Programmiersprache)|Cobra]]<ref>[http://cobra-language.com/ Cobra]</ref> sowie dem Python-Toolkit „Boa“<ref>[http://boa-constructor.sourceforge.net/ boa-constructor.sourceforge.net]</ref> äußert.
<!-- brauchen wir das?
Über den Ursprung der Sprache schrieb van Rossum rückblickend 1996:

{{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).
|Ü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=
<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 |zugriff=2014-08-11 |sprache=en}}</ref> Von 1995 bis 2000 erschienen Updates, 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 |zugriff=2014-08-11 |sprache=en}}</ref> In Version 2.6 wurde eine Hilfe eingebaut, mit der angezeigt werden kann, welche Code-Sequenzen vom Nachfolger Python 3 nicht mehr unterstützt werden und daher in darauf aufbauenden Versionen nicht mehr lauffähig sind.<ref>heise.de: [https://www.heise.de/newsticker/meldung/Python-2-6-oeffnet-Wege-zu-Version-3-209233.html Python 2.6 öffnet Wege zu Version 3] vom 2. Oktober 2008, abgerufen am 4. Oktober 2008</ref>

Python 3.0 (auch Python 3000) erschien am 3.&nbsp;Dezember 2008 nach längerer Entwicklungszeit. Es beinhaltet einige tiefgreifende Änderungen an der Sprache, etwa das Entfernen von Redundanzen bei Befehlssätzen und veralteten Konstrukten. Da Python 3.0 hierdurch teilweise inkompatibel zu früheren Versionen ist,<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 |zugriff=2014-08-11 |sprache=en}}</ref> beschloss die Python Software Foundation, Python 2.7 parallel zu Python 3 vorerst weiter durch die Versorgung mit Updates zu unterstützen.

Am 23.&nbsp;Dezember 2016 wurde die neueste Version 3.6 veröffentlicht.<ref>{{Internetquelle |url=https://docs.python.org/3.6/whatsnew/changelog.html#python-3-6-0 |titel=Release Notes zu Python 3.6 |hrsg=Python Software Foundation |zugriff=2017-01-04 |sprache=en}}</ref>

== 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> {{Webarchiv|text=docs.python.org |url=http://docs.python.org/ref/keywords.html |wayback=20080517070751 |archiv-bot=2018-03-25 20:02:31 InternetArchiveBot }}</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 |zugriff=2014-08-15 |sprache=en}}</ref>

Durch dieses Konzept wurde es auch ermöglicht, Python-Programme in anderen Sprachen als Module einzubetten. Dadurch können Schwächen von Python umgangen werden. Beispielsweise können für zeitkritische Teile Routinen in maschinennäheren Sprachen wie z.&nbsp;B. [[C (Programmiersprache)|C]] aufgerufen werden.<ref>{{Internetquelle |url=https://docs.python.org/2/extending/extending.html |titel=Verwendung fremdsprachiger Module |hrsg=Python Software Foundation |zugriff=2014-08-12 |sprache=en}}</ref> Umgekehrt lassen sich mit Python Module und [[Plug-in]]s für andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist z.&nbsp;B. bei [[Blender (Software)|Blender]], [[Cinema 4D]], [[GIMP]], [[Maya (Software)|Maya]], [[Apache OpenOffice|OpenOffice]] bzw. [[LibreOffice]], [[PyMOL]], [[SPSS]], [[QGIS]] oder [[KiCad]] der Fall.

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.

Die [[Datentyp]]en werden dynamisch verwaltet, eine statische [[Typsicherheit|Typprüfung]] wie z.&nbsp;B. bei [[C++]] gibt es nicht. Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch [[Referenzzählung]]. Unicode-Unterstützung wurde in der Version 2.0 eingeführt.

Die wesentlichen Ziele und Regeln der Sprache wurden mit einer Reihe kurzer, humorvoller Phrasen unter dem Titel ''The Zen of Python'' im Jahr 2004 herausgegeben.<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 |zugriff=2014-08-12 |sprache=en}}</ref>

== Datentypen und Strukturen ==
Python besitzt eine größere Anzahl von grundlegenden Datentypen. Neben der herkömmlichen [[Arithmetik]] unterstützt es transparent auch beliebig große Ganzzahlen und [[Komplexe Zahl|komplexe Zahlen]].

Die Sprache verfügt über die übliche Ausstattung an Zeichenkettenoperationen. [[Zeichenkette]]n sind in Python allerdings unveränderliche Objekte (wie auch in [[Java (Programmiersprache)|Java]]). Daher geben Operationen, die das Ändern einer Zeichenkette bewerkstelligen sollen – wie z.&nbsp;B. das 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.&nbsp;h. Datentypen werden dynamisch vergeben, so wie bei [[Smalltalk (Programmiersprache)|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 (Programmiersprache)|Perl]], aber weniger strikt als etwa bei [[Objective CAML]].
Implizite Umwandlungen nach dem [[Duck-Typing]]-Prinzip sind unter anderem für numerische Typen definiert, so dass man beispielsweise eine komplexe Zahl mit einer langen Ganzzahl ohne explizite Typumwandlung multiplizieren kann.
Mit dem Format-Operator <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>[http://my.safaribooksonline.com/0596002815/lpython2-CHP-7-SECT-6 my.safaribooksonline.com]</ref>

=== 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)|Arrays]]) 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 (Arrays), 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 ''Wörterbüchern'' zusammen, einem Datentyp, der auch als ''assoziatives Array'' bezeichnet wird. Um die Datenkonsistenz zu sichern, müssen die ''Schlüssel'' eines Wörterbuches vom Typ „unveränderlich“ sein. Die ins Wörterbuch eingetragenen ''Werte'' können dagegen von beliebigem Typ sein.

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

=== 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 – in Wirklichkeit sind die Typen (wie in Smalltalk) selbst ein Objekt. Die Attribute eines Objektes können als Wörterbuch extrahiert werden.

== Syntax ==
Eines der Entwurfsziele für Python war die gute Lesbarkeit des Quellcodes. Die Anweisungen benutzen häufig englische Schlüsselwörter, wo andere Sprachen Symbole einsetzen. Darüber hinaus besitzt Python weniger syntaktische Konstruktionen als viele andere strukturierte Sprachen wie [[C (Programmiersprache)|C]], Perl oder [[Pascal (Programmiersprache)|Pascal]]:
* zwei Schleifenformen
** <code>for</code> zur Iteration über die Elemente einer Sequenz
** <code>while</code> zur Wiederholung einer Schleife, solange ein logischer Ausdruck wahr ist.
* Verzweigungen
** <code>if … elif … else</code> für Verzweigungen

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. 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 wurde und nicht mittels <code>break</code> abgebrochen wird.

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

Hierzu als Beispiel die Berechnung der [[Fakultät (Mathematik)|Fakultät]] einer Ganzzahl, einmal in [[C (Programmiersprache)|C]] und einmal in Python:

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

Die gleiche Funktion in Python:
<syntaxhighlight lang="python">
def fakultaet(x):
if x > 1:
return x * fakultaet(x - 1)
else:
return 1
</syntaxhighlight>

Es ist jedoch darauf zu achten, die Einrückungen im gesamten Programmtext gleich zu gestalten. Die gemischte Verwendung von Leerzeichen und [[Tabulatorzeichen]] kann zu Problemen führen, da der Python-Interpreter Tabstops 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ärer Operator|ternärem Operator]] formulieren:

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

Die Fakultätsfunktion in Python:
<syntaxhighlight lang="python">
def fakultaet(x):
return x * fakultaet(x - 1) if x > 1 else 1
</syntaxhighlight>

=== Funktionales Programmieren ===
[http://coconut-lang.org/ Coconut] und andere Erweiterungen erleichtern das funktionale Programmieren in Python, darüber hinaus lässt sich dies auch mit dem herkömmlichen Python realisieren:

Ausdrucksstarke syntaktische Elemente zur funktionalen Programmierung vereinfachen das Arbeiten mit Listen und anderen Sammeltypen. Eine solche Vereinfachung ist die Listennotation, die aus der funktionalen Programmiersprache Haskell stammt; hier bei der Berechnung der ersten fünf Zweierpotenzen:
<syntaxhighlight lang="python">
zahlen = [1, 2, 3, 4, 5]
zweierpotenzen = [2 ** n for n in zahlen]
</syntaxhighlight>
Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie den [[Continuation-passing style]].

Pythons Schlüsselwort <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]]:
<syntaxhighlight lang="python">
def add_and_print_maker(x):
def temp(y):
print("{} + {} = {}".format(x, y, x + y))
return temp
</syntaxhighlight>

Damit ist auch [[Currying]] auf einfache Art möglich, um generische Funktionsobjekte auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel:
<syntaxhighlight lang="python">
def curry(func, knownargument):
return lambda unknownargument: func(unknownargument, knownargument)
</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 dasselbe tut wie <code>func</code>, aber nur noch einen Parameter benötigt.

Anonyme Namensräume (sog. [[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:
<syntaxhighlight lang="python">
def stack():
l = []

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

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

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

return pop, push, is_empty

pop, push, is_empty = stack()
</syntaxhighlight>

Auf diese Weise erhält man die drei Funktionsobjekte <code>pop</code>, <code>push</code>, <code>is_empty</code>, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne <code>l</code> direkt modifizieren zu können.

=== Ausnahmebehandlung ===
Python nutzt ausgiebig die [[Ausnahmebehandlung]] (engl. ''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.

Der Python-Ansatz legt den Einsatz von Ausnahmen nahe, wann immer eine Fehlerbedingung entstehen könnte. Nützlich ist dieses Prinzip beispielsweise bei der Konstruktion robuster Eingabeaufforderungen:
<syntaxhighlight lang="python">
while True:
num = input("Eine ganze Zahl eingeben: ")
try:
num = int(num)
except ValueError:
print("Eine _Zahl_, bitte!")
else:
break
</syntaxhighlight>

Dieses Programmstück fragt den Benutzer so lange nach einer Zahl, bis dieser eine Zeichenfolge eingibt, die sich per <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 (<code>SIGINT</code>, häufig Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (<code>except KeyboardInterrupt: …</code>).

== Standardbibliothek ==
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. 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 Schnittstellen, zur Verbindung mit [[Relationale Datenbank|relationalen Datenbanken]] und zur Manipulation [[Regulärer Ausdruck|regulärer Ausdrücke]] sind ebenfalls enthalten.

== Grafische Benutzeroberflächen (GUI) ==

Mit Hilfe des mitgelieferten Moduls [[Tkinter]] kann in Python (wie in Perl und [[Tcl]]) schnell eine [[grafische Benutzeroberfläche]] (GUI) mit [[Tk (Toolkit)|Tk]] erzeugt werden. Es gibt darüber hinaus eine Vielzahl von weiteren [[Wrapper (Software)|Wrappern]] von anderen Anbietern. Sie stellen [[Sprachanbindung|Anbindungen]] ({{enS|language bindings}}) zu [[GUI-Toolkit]]s wie z.&nbsp;B. [[PyGTK]], [[PyQt]], [[wxPython]], [[PyObjC]] und Py[[FLTK]] zur Verfügung.

Neben Tkinter wird auch ein Modul zum Zeichnen von [[Turtle-Grafik]]en mitgeliefert.

=== Beispiel zum Tkinter-Modul ===
<syntaxhighlight lang="python">
from tkinter import *
fenster = Tk()
fenster.geometry("200x100")
label = Label(fenster, text="Hallo Welt!")
label.pack()
def befehl():
fenster.destroy()
button = Button(fenster, text="OK", command=befehl)
button.pack()
</syntaxhighlight>
[[Datei:Tkinter Hallo Welt.png|zentriert|mini|184x184px|Beispiel für ein einfaches Tkinter Fenster]]

=== Beispiel zum Turtle-Grafik-Modul ===
<syntaxhighlight lang="python">
from turtle import *
speed(0)
reset()
x = -200
y = 200
while y != -200:
goto(x,y)
x = -x
y = - y
goto(x, y)
goto(0, 0)
y = -y
x = -x
y = y - 5
</syntaxhighlight>
[[Datei:Beispiel für ein Turtle-Muster.png|zentriert|mini|Ergebnis des angegebenen Programmiercodes]]

==== Weitere Grafiken ====
<gallery class="center" 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):
if len(liste) <= 1:
return liste
pivotelement = liste.pop()
links = [element for element in liste if element < pivotelement]
rechts = [element for element in liste if element >= pivotelement]
return quicksort(links) + [pivotelement] + quicksort(rechts)
</syntaxhighlight>

Hier ermöglicht insbesondere die Listennotation für die Variablen ''links'' und ''rechts'' eine kompakte Darstellung. Zum Vergleich eine iterative Formulierung dieser zwei Zeilen:
<syntaxhighlight lang="python">
...
links, rechts = [], [] # leere Listen für links und rechts anlegen
pivotelement = liste.pop() # das letzte Element aus der Liste nehmen als Referenz
for element in liste: # die restlichen Elemente der Liste durchlaufen ...
if element < pivotelement: # ... und mit dem pivotelement vergleichen
links.append(element) # wenn kleiner: dann an linke Liste anhängen
else:
rechts.append(element) # ansonsten wenn nicht kleiner: dann an rechte Liste anhängen
...
</syntaxhighlight>

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

== Interaktive Benutzung ==
So wie [[Lisp]], [[Ruby (Programmiersprache)|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 [[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.

== Implementierungen ==
Neben der Referenzimplementierung [[CPython]] 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. Außer den Interpretern existieren [[Compiler]], die Python-Code in eine andere Programmiersprache übersetzen: Mit [[Cython]] kann Python-Code in effiziente C-Erweiterungen übersetzt oder externer C/C++-Code angebunden werden. Ebenso existiert der Compiler [[IronPython]] für die [[.NET]]- bzw. [[Mono (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 Interpreter für Python, [[PyPy]], welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung. Es existiert ein Python-Interpreter für [[Mikrocontroller]] namens MicroPython.<ref>[https://micropython.org/ MicroPython für Microcontroller]</ref>

== Entwicklungsumgebung ==

Neben IDLE, das oft mit Python installiert wird und im Wesentlichen 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]] oder [[PyCharm]]. Des Weiteren existieren [[Plug-in]]s für größere IDEs wie [[Eclipse (IDE)|Eclipse]], [[Visual Studio]] und [[NetBeans IDE|NetBeans]]. Texteditoren für Programmierer wie [[Vim]] und [[Emacs]] lassen sich gegebenenfalls auch für Python anpassen. Allerdings ist keine IDE notwendig, da Pythoncode nicht kompiliert werden muss, sodass sich Skripte grundsätzlich auch mit einem beliebigen Texteditor schreiben lassen.

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

== Verbreitung und Einsatz ==
Python ist für die meisten gängigen Betriebssysteme frei erhältlich und bei den meisten Linux-Distributionen im Standardumfang enthalten. Um Python in Webserver einzubinden, wird Webserver-umgreifend [[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]], [[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. Außerdem basieren mehrere bekannte kommerzielle Projekte, etwa [[Google]] und [[YouTube]], 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]]''.

Im Rahmen des Projektes [[100-Dollar-Laptop]] wird Python als Standardsprache der 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 dahinter liegende Informationstechnologie real zu erleben und nach Belieben „hinter die Kulissen“ zu schauen.

In der [[Wissenschaftsgemeinde]] genießt Python große Verbreitung, hauptsächlich wegen des einfachen Einstiegs in die Programmierung und der großen Auswahl wissenschaftlicher Bibliotheken. Numerische Rechnungen und die visuelle Aufbereitung der Ergebnisse in Graphen werden meist mit [[NumPy]] und der [[Matplotlib]] erledigt. Es existiert ein Projekt namens [[SciPy]], welches viele wissenschaftliche Bibliotheken Pythons bündelt und somit einfacher zugänglich macht. Mit [[TensorFlow]] gibt es eine große Bibliothek zur Forschung und Nutzung von künstlicher Intelligenz und maschinellem Lernen.

== Kritik ==
Bei der Definition (aber nicht beim Aufruf) von Methoden muss der Parameter ''self'', der der Instanz entspricht, deren Methode aufgerufen wird, explizit angegeben werden. Dies wird oft als unelegant und nicht objektorientiert empfunden.<ref name="KuchlingWarts">{{Webarchiv | url=http://www.amk.ca/python/writing/warts.html | wayback=20031002184114 | text=}}</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> außerdem entspricht es dem Python-Grundsatz „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>[https://www.python.org/dev/peps/pep-3135/ python.org]</ref>

Ferner wird die mangelnde statische [[Typsicherheit]] der Programmiersprache kritisiert.<ref>Rainer Fischbach: [https://www.heise.de/ix/artikel/Beschraenkung-aufs-Wesentliche-505730.html Wie Python arbeitet - Beschränkung aufs Wesentliche], heise.de, November 1999, abgerufen am 3. März 2017</ref>

Auf [[Multiprozessor]]-Systemen behindert der sogenannte ''Global Interpreter Lock (GIL)'' von CPython die Effizienz von Python-Anwendungen, die [[softwareseitiges Multithreading]] benutzen. Diese Beschränkung existiert unter [[Jython]] oder [[IronPython]] allerdings nicht. Bislang ist von offizieller Seite nicht geplant, den GIL zu ersetzen. Stattdessen wird empfohlen, mehrere miteinander kommunizierende Prozesse anstelle von Threads zu verwenden.<ref>[https://www.python.org/doc/faq/library/#can-t-we-get-rid-of-the-global-interpreter-lock python.org]</ref><ref>[http://www.artima.com/weblogs/viewpost.jsp?thread=214235 artima.com]</ref>

In den aktuell vorherrschenden Implementationen ist die Geschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,<ref name="shootout-c">[http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=gpp Python–C]</ref> aber ähnlich wie bei [[Perl (Programmiersprache)|Perl]],<ref name="shootout-perl">[http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=perl Python–Perl]</ref> [[PHP]],<ref name="shootout-php-1">[http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=php Benchmark-Vergleich Python–PHP]</ref> [[Dart (Programmiersprache)|Dart]]<ref name="shootout-php-2">[http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&lang2=dart Benchmark-Vergleich Python–Dart]</ref> und [[Ruby (Programmiersprache)|Ruby]].<ref name="shootout-ruby">[http://benchmarksgame.alioth.debian.org/u64q/ruby.html Benchmark-Vergleich Python–Ruby]</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>[http://www6.uniovi.es/python/dev/culture/ Python Culture]{{Toter Link|date=2018-03 |archivebot=2018-03-25 20:02:31 InternetArchiveBot |url=http://www6.uniovi.es/python/dev/culture/ }}</ref> Man beruft sich dabei auf Autoritäten wie [[Donald Knuth]] und [[Tony Hoare]], die von verfrühter Optimierung abraten. Wenn Performanceprobleme auftreten, die nicht durch Optimierung des Python-Codes gelöst werden können,<ref>[https://www.python.org/doc/essays/list2str/ Python Patterns – An Optimization Anecdote]</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 ==
'''Für den Einstieg'''
* {{Literatur |Autor=Allen B. Downey |Titel=Programmieren lernen mit Python |Auflage=2. |Verlag=O'Reilly |Ort=Köln (u.&nbsp;a.) |Datum=2014 |ISBN=978-3-95561-806-3 |Seiten=297 |Übersetzer=Stefan Fröhlich}}
* {{Literatur |Autor=Bernd Klein |Titel=Einführung in Python 3. Für Ein- und Umsteiger |Auflage=2., überarb. und erw. |Verlag=Hanser |Ort=München |Datum=2014 |ISBN=978-3-446-44133-0 |Seiten=494 |Online=[http://d-nb.info/1056934255/04 Inhaltsverzeichnis]}}
* {{Literatur |Autor=Thomas Theis |Titel=Einstieg in Python. Ideal für Programmieranfänger geeignet |Auflage=4., akt. u. erw. |Verlag=Galileo Press |Ort=Bonn |Datum=2014 |ISBN=978-3-8362-2861-9 |Seiten=478 |Online=[http://d-nb.info/1044867264/04 Inhaltsverzeichnis]}}
* {{Literatur |Autor=Mark Lutz |Titel=Learning Python |Auflage=5. |Verlag=O'Reilly |Ort=Sebastopol (u.&nbsp;a.) |Datum=2013 |ISBN=978-1-4493-5573-9 |Seiten=1540 |Online=[https://cdn.oreillystatic.com/oreilly/booksamplers/9781449355739_sampler.pdf Inhaltsverzeichnis]}}
* Hans Petter Langtangen: [http://www.springer.com/978-3-642-54958-8/ ''A Primer on Scientific Programming with Python.'']<br />Springer, 4. Auflage 2014, ISBN 978-3-642-54958-8
* Mark Pilgrim, Florian Wollenschein: ''Python 3 – Intensivkurs'', Springer, 1. Auflage 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 bei google-books])
* Mark Pilgrim: [http://www.diveintopython3.net/ ''Dive Into Python 3''] Springer, 2. Auflage 2009, ISBN 1-4302-2415-0 (Download verfügbar)
* {{Literatur |Autor=John Paul Mueller |Titel=Python programmieren lernen für Dummies |Auflage=1. |Verlag=Wiley |Ort=Weinheim |Datum=2015 |ISBN=978-3-527-71148-2 |Seiten=379 |Online=[http://d-nb.info/106110463X 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=2015 |ISBN=978-3-8310-2700-2 |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}}

'''Referenzen'''
* {{Literatur |Autor=Michael Weigend |Titel=Python ge-packt |Auflage=6. |Verlag=mitp |Ort=Frechen |Datum=2015 |ISBN=978-3-8266-8726-6 |Seiten=644 |Online=[http://d-nb.info/1064604544/04 Inhaltsverzeichnis]}}
* {{Literatur |Autor=Johannes Ernesti; Peter Kaiser |Titel=[https://www.rheinwerk-verlag.de/python-3_3789/ ''Python 3. Das umfassende Handbuch''] |Auflage=4., akt. u. erw. |Verlag=Rheinwerk |Ort=Bonn |Datum=2015 |ISBN=978-3-8362-3633-1 |Seiten=1032 |Online=[http://d-nb.info/1067781641/04 Inhaltsverzeichnis]}}
* {{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 |Online=[http://d-nb.info/1048697584/04 Inhaltsverzeichnis]}}

'''Weiterführendes'''
* Gregor Lingl: ''Python für Kids'', bhv, 4. Auflage 2010, ISBN 3-8266-8673-X.
* Farid Hajji: ''Das Python-Praxisbuch'', Addison-Wesley, 1. Auflage 2008, ISBN 978-3-8273-2543-3.
* Hans P. Langtangen: ''Python Scripting for Computational Science'', Springer, 3. Auflage 2008, ISBN 3-540-43508-5.
* Michael Weigend: ''Objektorientierte Programmierung mit Python'', mitp-Verlag, 1. Auflage 2006, ISBN 3-8266-0966-2.

== Weblinks ==
{{Commonscat|Python (programming language)|Python}}
{{Wikibooks|Python unter Linux|Python 2 unter Linux}}
* [https://www.python.org/ Offizielle Website] (englisch)
* [http://www.python-forum.de/ Das deutsche Python-Forum]
* [http://www.python-kurs.eu/index.php Python-Kurs.eu – Online-Kurs und Tutorials für Python 2 und 3]
* [https://pythonspot.com/ Python Tutorials] (englisch)
* [http://pythonprogramminglanguage.com/ Python 3-Anfängerkurs] (englisch)
* [http://thepythonguru.com/ Python beginners guide] (englisch)
* [http://www.swaroopch.com/notes/python/ A byte of Python] v. C. H. Swaroop, (Download verfügbar)
* [http://www.linuxjournal.com/article/3882 Eric S. Raymond über seine Erfahrungen mit Python] (englisch)
* [http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/ Snake Wrangling for Kids – Learning to Program with Python] v. Jason R. Briggs, für achtjährige und ältere Kinder, [[Creative Commons]] Lizenz (englisch)
* [http://python-verband.org/informieren/news/schlangengerangel-fuer-kinder Schlangengerangel für Kinder – Programmieren Lernen für Kinder], für achtjährige und ältere Kinder, [[Creative Commons]] Lizenz (deutsch)
* [http://python.net/%7Egoodger/projects/pycon/2007/idiomatic/handout.html Code Like a Pythonista: Idiomatic Python] v. David Goodger (englisch)

== Einzelnachweise ==
<references />

{{Gesprochene Version
|datei=Python (Programmiersprache).ogg
|länge=20.30 min
|größe=13,0 MB
|version=68824020
|datum=5. Januar 2010
}}
{{Lesenswert|23. Oktober 2005|10220285}}

{{Normdaten|TYP=s|GND=4434275-5|LCCN=sh/96/8834}}

[[Kategorie:Python (Programmiersprache)| ]]
[[Kategorie:Programmiersprache]]
[[Kategorie:Skriptsprache]]
[[Kategorie:Objektorientierte Programmiersprache]]
[[Kategorie:Imperative Programmiersprache]]
[[Kategorie:Funktionale Programmiersprache]]
587
Bearbeitungen

Spenden-Adressen:
Bitcoin Icon BTC: 1EoecgUZnAjamUYaKstqwbremQqbucTaoZ
Ethereum Icon ETH: 0x0D2Ab63dfe70a7fA12f9d66eCfEA9dDc8F5173A8
XEM Icon XEM: NBZPMU-XES6ST-ITEBR3-IHAPTR-APGI3Y-RAAMHV-VZFJ
Verge Icon XVG: DGYmzxoe3ryK6MnsR13GqR9r1NThpxPcKs

Navigationsmenü