https://de.wikipedia.org/w/api.php?action=feedcontributions&feedformat=atom&user=CommunityEditorSS Wikipedia - Benutzerbeiträge [de] 2025-04-25T14:06:55Z Benutzerbeiträge MediaWiki 1.44.0-wmf.25 https://de.wikipedia.org/w/index.php?title=Python_(Programmiersprache)&diff=210483510 Python (Programmiersprache) 2021-04-02T18:23:01Z <p>CommunityEditorSS: Info hinzugefügt</p> <hr /> <div>{{Infobox Programmiersprache<br /> | Name = <br /> | Logo = [[Datei:Python logo and wordmark.svg|230px|Logo]]<br /> | Beschreibung = <br /> | Paradigma = multiparadigmatisch<br /> | Erscheinungsjahr = &lt;!-- wikidata --&gt;<br /> | Designer = &lt;!-- wikidata --&gt;<br /> | Entwickler = &lt;!-- wikidata --&gt;<br /> | AktuelleVersion = &lt;!-- wikidata --&gt;<br /> | AktuelleVersionFreigabeDatum = &lt;!-- wikidata --&gt;<br /> | AktuelleVorabVersion = <br /> | AktuelleVorabVersionFreigabeDatum = <br /> | Typisierung = [[Starke Typisierung|stark]], [[Dynamische Typisierung|dynamisch]] („[[Duck-Typing]]“)<br /> | Implementierung = CPython, [[Jython]], [[IronPython]], [[PyPy]]<br /> | Dialekte = <br /> | Standardisierungen = <br /> | Beeinflusst_von = &lt;!-- wikidata --&gt;<br /> | Beeinflusste = [[Ruby (Programmiersprache)|Ruby]], [[Boo (Programmiersprache)|Boo]], [[Groovy]], [[Cython]], [[JavaScript]], [[Swift (Programmiersprache)|Swift]]<br /> | Betriebssystem = <br /> | Lizenz = &lt;!-- wikidata --&gt;<br /> | Website = &lt;!-- wikidata --&gt;<br /> }}<br /> <br /> '''Python''' ([{{IPA|ˈpʰaɪθn̩}}], [{{IPA|ˈpʰaɪθɑn}}], auf Deutsch auch [{{IPA|ˈpʰyːtɔn}}]) ist eine universelle, üblicherweise [[Interpreter|interpretierte]], [[höhere Programmiersprache]].&lt;ref&gt;{{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}}&lt;/ref&gt; Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern.&lt;ref&gt;{{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}}&lt;/ref&gt; So werden beispielsweise [[Blockstruktur|Blöcke]] nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert.<br /> <br /> Python unterstützt mehrere [[Programmierparadigma|Programmierparadigmen]], z.&amp;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.<br /> <br /> == Entwicklungsgeschichte ==<br /> [[Datei:Guido van Rossum.jpg|mini|hochkant|[[Guido van Rossum]], der Entwickler von Python]]<br /> Die Sprache wurde Anfang der 1990er Jahre von [[Guido van Rossum]] am [[Centrum Wiskunde &amp; 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.<br /> <br /> Der Name geht nicht (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]].&lt;ref&gt;[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]&lt;/ref&gt; Trotzdem etablierte sich die [[Assoziation (Psychologie)|Assoziation]] zur Schlange, was sich unter anderem in der Programmiersprache [[Cobra (Programmiersprache)|Cobra]]&lt;ref&gt;{{cite web|url=http://cobra-language.com/|title=The Cobra Programming Language|work=cobra-language.com}}&lt;/ref&gt; sowie dem Python-Toolkit „Boa“&lt;ref&gt;{{cite web|url=http://boa-constructor.sourceforge.net/|title=Boa Constructor home|work=boa-constructor.sourceforge.net}}&lt;/ref&gt; äußert.<br /> &lt;!-- brauchen wir das?<br /> Über den Ursprung der Sprache führte van Rossum retrospektiv 1996 aus:<br /> <br /> {{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).<br /> |Ü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=<br /> &lt;ref&gt;{{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}}&lt;/ref&gt;}}<br /> --&gt;<br /> 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.&lt;ref&gt;{{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}}&lt;/ref&gt; Von 1995 bis 2000 erschienen neue Versionen, die fortlaufend als Python 1.1, 1.2 etc. bezeichnet wurden.<br /> <br /> Python 2.0 erschien am 16.&amp;nbsp;Oktober 2000. Neue Funktionen umfassten eine voll funktionsfähige [[Garbage Collection]] (automatische Speicherbereinigung) und die Unterstützung für den [[Unicode]]-Zeichensatz.&lt;ref&gt;{{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}}&lt;/ref&gt; 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.&lt;ref&gt;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&lt;/ref&gt;<br /> <br /> Python 3.0 (auch Python 3000) erschien am 3.&amp;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,&lt;ref&gt;{{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}}&lt;/ref&gt; 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 zu noch erscheinenden 2er-Versionen, dem Supportende und Hilfe zur Migration siehe Abschnitt ''[[#Ende von Python 2|Ende von Python 2]]'').<br /> <br /> == Ziele ==<br /> 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.&lt;ref&gt;[https://docs.python.org/3/reference/lexical_analysis.html#keywords ''2. Lexical analysis''] Python 3.7.2rc1 documentation. (englisch)&lt;/ref&gt; Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen.&lt;ref&gt;{{Literatur |Autor=Marty Alchin |Hrsg=Apress |Titel=Pro Python |Datum=2010 |ISBN=978-1-4302-2757-1 |Seiten=6 |Sprache=en}}&lt;/ref&gt;<br /> <br /> 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.&lt;ref&gt;{{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}}&lt;/ref&gt;<br /> Durch dieses Konzept wurde es auch ermöglicht, Python-Programme in anderen Sprachen als Module einzubetten, um z.&amp;nbsp;B. Schwächen von Python zu umgehen. Beispielsweise können für zeitkritische Teile Routinen in maschinennäheren Sprachen wie z.&amp;nbsp;B. [[C (Programmiersprache)|C]] aufgerufen werden.&lt;ref&gt;{{Internetquelle |url=https://docs.python.org/3.7/extending/extending.html |titel=Verwendung fremdsprachiger Module |hrsg=Python Software Foundation |sprache=en |abruf=2019-09-10}}&lt;/ref&gt; Umgekehrt lassen sich mit Python Module und [[Plug-in]]s für andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist z.&amp;nbsp;B. bei [[Blender (Software)|Blender]], [[Cinema 4D]], [[GIMP]], [[Maya (Software)|Maya]], [[Apache OpenOffice|OpenOffice]] bzw. [[LibreOffice]], [[PyMOL]], [[SPSS]], [[QGIS]] oder [[KiCad]] der Fall.<br /> <br /> Python ist eine Multi[[Programmierparadigma|paradigmen]]&lt;nowiki /&gt;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.<br /> Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch [[Referenzzählung]].<br /> [[Datentyp]]en werden dynamisch verwaltet, eine automatische statische [[Typsicherheit|Typprüfung]] wie z.&amp;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.&lt;ref&gt;{{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}}&lt;/ref&gt;&lt;ref&gt;{{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}}&lt;/ref&gt;<br /> <br /> == Datentypen und Strukturen ==<br /> [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]]<br /> 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.<br /> <br /> 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.&amp;nbsp;B. durch Ersetzen von Zeichen – immer eine neue Zeichenkette zurück.<br /> <br /> 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.&amp;nbsp;h. Datentypen werden dynamisch vergeben, so wie bei [[Smalltalk (Programmiersprache)|Smalltalk]] oder [[Lisp]] – und nicht wie bei Java.<br /> <br /> 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]].<br /> 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.<br /> <br /> Mit dem Format-Operator &lt;code&gt;%&lt;/code&gt; gibt es eine implizite Umwandlung eines Objekts in eine Zeichenkette. Der Operator &lt;code&gt;==&lt;/code&gt; überprüft zwei Objekte auf (Wert-)Gleichheit. Der Operator &lt;code&gt;is&lt;/code&gt; überprüft die tatsächliche [[Identität (Logik)|Identität]] zweier Objekte.&lt;ref&gt;{{cite web|url=http://my.safaribooksonline.com/0596002815|title=Learning Python, 2nd Edition|first1=Mark|last1=Lutz|first2=David|last2=Ascher|date=2003-12-23|publisher=O'Reilly Media, Inc.|work=Safari Books Online}}&lt;/ref&gt;<br /> <br /> === Sammeltypen ===<br /> 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.&amp;nbsp;B. erweiterbare Felder, wohingegen Tupel und Zeichenketten eine feste Länge haben und unveränderlich sind.<br /> <br /> Der Zweck solcher Unveränderlichkeit hängt z.&amp;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 ''Dictionaries'' vom Typ „unveränderlich“ sein. Die ins ''Dictionary'' eingetragenen ''Werte'' können dagegen von beliebigem Typ sein.<br /> <br /> ''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.<br /> <br /> === Objektsystem ===<br /> 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]].<br /> <br /> 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.<br /> <br /> == Syntax ==<br /> 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]]:<br /> * zwei Schleifenformen<br /> ** &lt;code&gt;for&lt;/code&gt; zur Iteration über die Elemente einer Sequenz<br /> ** &lt;code&gt;while&lt;/code&gt; zur Wiederholung einer Schleife, solange ein logischer Ausdruck wahr ist.<br /> * Verzweigungen<br /> ** &lt;code&gt;if … elif … else&lt;/code&gt; für Verzweigungen<br /> <br /> Beim letzten Punkt bieten andere Programmiersprachen zusätzlich &lt;code&gt;switch&lt;/code&gt; und/oder &lt;code&gt;goto&lt;/code&gt;. Diese wurden zugunsten der Lesbarkeit in Python weggelassen und müssen durch &lt;code&gt;if&lt;/code&gt;-Konstrukte oder andere Verzweigungsmöglichkeiten (Slices, Wörterbücher) abgebildet werden. Im Gegensatz zu vielen anderen Sprachen können &lt;code&gt;for&lt;/code&gt;- und &lt;code&gt;while&lt;/code&gt;-Schleifen einen &lt;code&gt;else&lt;/code&gt;-Zweig haben. Dieser wird nur ausgeführt, wenn die Schleife vollständig durchlaufen wurde und nicht mittels &lt;code&gt;break&lt;/code&gt; abgebrochen wird.<br /> <br /> === Strukturierung durch Einrücken ===<br /> 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. 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.<br /> <br /> Hierzu als Beispiel die Berechnung der [[Fakultät (Mathematik)|Fakultät]] einer Ganzzahl, einmal in [[C (Programmiersprache)|C]] und einmal in Python:<br /> <br /> Fakultätsfunktion in C:<br /> &lt;syntaxhighlight lang=&quot;c&quot;&gt;<br /> int factorial(int x) {<br /> if (x &lt;= 1)<br /> return 1;<br /> <br /> return x * factorial(x - 1);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Die gleiche Funktion in Python:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def factorial(x):<br /> if x &lt;= 1:<br /> return 1<br /> <br /> return x * factorial(x - 1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> 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.<br /> <br /> Man kann die Fakultätsfunktion aber auch wie in C einzeilig mit [[Ternärer Operator|ternärem Operator]] formulieren:<br /> <br /> Die Fakultätsfunktion in C:<br /> &lt;syntaxhighlight lang=&quot;c&quot;&gt;<br /> int factorial(int x) {<br /> return x &lt;= 1 ? 1 : x * factorial(x - 1);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Die Fakultätsfunktion in Python:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def factorial(x):<br /> return 1 if x &lt;= 1 else x * factorial(x - 1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Funktionales Programmieren ===<br /> Coconut&lt;ref&gt;[http://coconut-lang.org/ Coconut] (Erweiterung zu Pyhon)&lt;/ref&gt; und andere Erweiterungen erleichtern das funktionale Programmieren in Python. Darüber hinaus lässt sich dies auch mit dem herkömmlichen Python realisieren:<br /> <br /> 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:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> zahlen = [1, 2, 3, 4, 5]<br /> zweierpotenzen = [2 ** n for n in zahlen]<br /> &lt;/syntaxhighlight&gt;<br /> Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie den [[Continuation-Passing Style]].<br /> <br /> Pythons Schlüsselwort &lt;code&gt;lambda&lt;/code&gt; könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solche &lt;code&gt;lambda&lt;/code&gt;-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]]:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def add_and_print_maker(x):<br /> def temp(y):<br /> print(&quot;{} + {} = {}&quot;.format(x, y, x + y))<br /> <br /> return temp<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Damit ist auch [[Currying]] auf einfache Art möglich, um generische Funktionsobjekte auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def curry(func, known_argument):<br /> return lambda unknown_argument: func(unknown_argument, known_argument)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Wird die &lt;code&gt;curry&lt;/code&gt;-Funktion aufgerufen, erwartet diese eine Funktion mit zwei notwendigen Parametern sowie die Parameterbelegung für den zweiten Parameter dieser Funktion. Der Rückgabewert von &lt;code&gt;curry&lt;/code&gt; ist eine Funktion, die das Gleiche tut wie &lt;code&gt;func&lt;/code&gt;, aber nur noch einen Parameter benötigt.<br /> <br /> [[Closure (Funktion)|Closures]] sind mit den o.&amp;nbsp;g. Mechanismen in Python ebenfalls einfach möglich. Ein simples Beispiel für einen [[Stapelspeicher|Stack]], intern durch eine Liste repräsentiert:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def stack():<br /> l = []<br /> <br /> def pop():<br /> if not is_empty():<br /> return l.pop()<br /> <br /> def push(element):<br /> l.append(element)<br /> <br /> def is_empty():<br /> return len(l) == 0<br /> <br /> return pop, push, is_empty<br /> <br /> pop, push, is_empty = stack()<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Auf diese Weise erhält man die drei Funktionsobjekte &lt;code&gt;pop&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;, &lt;code&gt;is_empty&lt;/code&gt;, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne &lt;code&gt;l&lt;/code&gt; direkt modifizieren zu können.<br /> <br /> === Ausnahmebehandlung ===<br /> 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.<br /> <br /> Ausnahmen haben einige Vorteile gegenüber anderen beim Programmieren üblichen Verfahren der Fehlerbehandlung (wie z.&amp;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.<br /> <br /> 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:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> while True:<br /> num = input(&quot;Eine ganze Zahl eingeben: &quot;)<br /> <br /> try:<br /> num = int(num)<br /> except ValueError:<br /> print(&quot;Eine _Zahl_, bitte!&quot;)<br /> else:<br /> break<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Dieses Programmstück fragt den Benutzer so lange nach einer Zahl, bis dieser eine Zeichenfolge eingibt, die sich per &lt;code&gt;int()&lt;/code&gt; 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.<br /> <br /> Ebenso kann auch das hier nicht berücksichtigte [[Interrupt]]-Signal (&lt;code&gt;SIGINT&lt;/code&gt;, häufig Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (&lt;code&gt;except KeyboardInterrupt: …&lt;/code&gt;).<br /> <br /> == Standardbibliothek ==<br /> 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.<br /> <br /> 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.<br /> <br /> == Grafische Benutzeroberflächen (GUI) ==<br /> 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.&amp;nbsp;B. [[PyGTK]], [[PyQt]], [[wxPython]], [[PyObjC]] und Py[[FLTK]] zur Verfügung.<br /> <br /> Neben Tkinter wird auch ein Modul zum Zeichnen von [[Turtle-Grafik]]en mitgeliefert.<br /> <br /> === Beispiel zum Tkinter-Modul ===<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> import tkinter as tk<br /> <br /> fenster = tk.Tk()<br /> fenster.geometry(&quot;200x100&quot;)<br /> label = tk.Label(fenster, text=&quot;Hallo Welt!&quot;)<br /> label.pack()<br /> <br /> def befehl():<br /> fenster.destroy()<br /> <br /> button = tk.Button(fenster, text=&quot;OK&quot;, command=befehl)<br /> button.pack()<br /> &lt;/syntaxhighlight&gt;<br /> [[Datei:Tkinter Hallo Welt.png|zentriert|mini|184x184px|Beispiel für ein einfaches Tkinter-Fenster]]<br /> <br /> === Beispiel zum Turtle-Grafik-Modul ===<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> import turtle<br /> from turtle import speed, reset, goto<br /> <br /> reset()<br /> speed(0)<br /> turtle.x = -200<br /> turtle.y = 200<br /> <br /> while turtle.y != -200:<br /> goto(turtle.x, turtle.y)<br /> turtle.x = - turtle.x<br /> turtle.y = - turtle.y<br /> goto(turtle.x, turtle.y)<br /> goto(0, 0)<br /> turtle.y = - turtle.y<br /> turtle.x = - turtle.x<br /> turtle.y -= 5<br /> &lt;/syntaxhighlight&gt;<br /> [[Datei:Beispiel für ein Turtle-Muster.png|zentriert|mini|Ergebnis des angegebenen Quellcodes]]<br /> <br /> ==== Weitere Grafiken ====<br /> &lt;gallery class=&quot;center&quot; widths=&quot;175&quot;&gt;<br /> Python Kreis-Muster.png|Bunter Kreis<br /> Python Turtle Muster Stern.png|Stern<br /> Turtle-Programmierung.gif|Die Turtle zeichnet ein Quadrat<br /> &lt;/gallery&gt;<br /> <br /> == Beispiel ==<br /> Als nicht triviales Beispiel sei hier der kompakte Sortieralgorithmus [[Quicksort]] angegeben:<br /> <br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def quicksort(liste):<br /> if len(liste) &lt;= 1:<br /> return liste<br /> <br /> pivotelement = liste.pop()<br /> links = [element for element in liste if element &lt; pivotelement]<br /> rechts = [element for element in liste if element &gt;= pivotelement]<br /> <br /> return quicksort(links) + [pivotelement] + quicksort(rechts)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Hier ermöglicht insbesondere die Listennotation für die Variablen ''links'' und ''rechts'' eine kompakte Darstellung. Zum Vergleich eine iterative Formulierung dieser zwei Zeilen:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> ...<br /> links, rechts = [], [] # leere Listen für links und rechts anlegen<br /> pivotelement = liste.pop() # das letzte Element aus der Liste nehmen als Referenz<br /> <br /> for element in liste: # die restlichen Elemente der Liste durchlaufen ...<br /> if element &lt; pivotelement: # ... und mit dem Pivot-Element vergleichen<br /> links.append(element) # wenn kleiner, dann an linke Liste anhängen<br /> else:<br /> rechts.append(element) # ansonsten, wenn nicht kleiner, dann an rechte Liste anhängen<br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> 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.<br /> <br /> == Interaktive Benutzung ==<br /> 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.<br /> <br /> 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.<br /> <br /> == Implementierungen ==<br /> 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 [[Just-in-time-Kompilierung|Just-in-time-Compiler]] für Python, [[PyPy]], welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung. Außerdem existiert ein Python-Interpreter für [[Mikrocontroller]] namens [[MicroPython]].&lt;ref&gt;{{cite web|url=https://micropython.org/|title=MicroPython – Python for microcontrollers|work=micropython.org}}&lt;/ref&gt;<br /> <br /> == Entwicklungsumgebung ==<br /> Neben [[IDLE (Python)|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]] 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.<br /> <br /> Für die verschiedenen [[GUI-Toolkit]]s, wie z.&amp;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.<br /> <br /> == Paketverwaltung ==<br /> 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'' verwaltet.&lt;ref&gt;{{Internetquelle |url=http://conda.pydata.org/docs/ |titel=Conda documentation |sprache=en |abruf=2016-02-25}}&lt;/ref&gt;<br /> <br /> == Verbreitung und Einsatz ==<br /> 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.<br /> <br /> 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.<br /> <br /> === Kommerzieller Einsatz ===<br /> Bekannte kommerzielle Projekte, etwa [[Google]] und [[YouTube]], basieren in Teilen auf Python.&lt;ref&gt;[https://www.python.org/about/quotes/ ''Quotes about Python'']. Abgerufen am 25. Juni 2011.&lt;/ref&gt; Auch in der Spieleindustrie findet die Sprache bisweilen Einsatz, etwa in ''[[EVE Online]]'', ''[[World in Conflict]]'' und ''[[Civilization IV]]''.<br /> <br /> === In der Lehre ===<br /> 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.&lt;ref&gt;[https://cscircles.cemc.uwaterloo.ca/de/ Computer Science Circles] – ein kostenfreier Dienst des Centre for Education in Mathematics and Computing, University of Waterloo.&lt;/ref&gt;&lt;ref&gt;[https://appcamps.de/unterrichtsmaterial/programmieren-mit-python/ Programmieren lernen mit Python]. App Camps gemeinnützige Unternehmergesellschaft, Hamburg&lt;/ref&gt;&lt;ref&gt;[https://www.udacity.com/course/programming-for-data-science-nanodegree--nd104 Programming for Data Science with Python], Udacity&lt;/ref&gt;<br /> &lt;ref&gt;[https://web2-unterricht.ch/2017/09/einstieg-ins-programmieren-mit-python/ Einstieg ins Programmieren mit Python]. Web 2 Unterricht, 3. September 2017&lt;/ref&gt;&lt;ref&gt;[https://bildungsserver.berlin-brandenburg.de/inf-sek1-python-bb Python – die Programmiersprache für imperative und objektorientierte Programmierung]. Bildungsserver Berlin-Brandenburg&lt;/ref&gt;&lt;ref&gt;[https://informatik.bildung-rp.de/fortbildung/fortbildungsmaterial/programmieren-mit-python.html Programmieren mit Python]. Bildungsserver Rheinland-Pfalz&lt;/ref&gt; Lehrbücher, die sich explizit an junge Menschen ohne Programmiererfahrung wenden, unterstützen und unterstreichen diese Entwicklung.&lt;ref&gt;Man vergleiche z.&amp;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&lt;/ref&gt;<br /> <br /> 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.&lt;ref&gt;OLPC-[[Wiki]]: „[http://wiki.laptop.org/go/Python Python für den 100-Dollar-Laptop]“&lt;/ref&gt; Damit soll Kindern die Möglichkeit gegeben werden, die dahinter liegende Informationstechnik real zu erleben und nach Belieben „hinter die Kulissen“ zu schauen.<br /> <br /> Der Einplatinen-Computer [[Raspberry Pi]] ''(Python Interpreter)'' sollte ursprünglich mit einem im [[ROM]] integrierten Python-Interpreter ausgeliefert werden.&lt;ref&gt;{{cite web|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=}}&lt;/ref&gt; Auch heute ist Python eine der bevorzugtesten Sprachen für den Raspberry Pi. Sein Standard-Betriebssystem [[Raspberry Pi|Raspberry Pi OS]] kommt mit einer großen Python-Bibliothek zur Ansteuerung der Hardware.<br /> <br /> Python wird weltweit in der Informatikausbildung an Schulen und Universitäten eingesetzt. So stehen 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.&amp;nbsp;B. wird von der Universität Waterloo in Kanada bereitgestellt. Die deutsche Version wird betrieben von den deutschen Bundesweiten Informatikwettbewerben.&lt;ref&gt;[https://bwinf.de/programmierenlernen/#collapse-7235 Programmieren lernen]. Bundesweite Informatikwettbewerbe. Ein Projekt der Gesellschaft für Informatik e.&amp;nbsp;V., des Fraunhofer-Verbunds IUK-Technologie und des Max-Planck-Instituts für Informatik.&lt;/ref&gt; TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.&lt;ref&gt;[http://www.tigerjython.ch/download/flyer.pdf Flyer TigerJython – Programmierkonzepte mit Python]. Pädagogischen Hochschule Bern&lt;/ref&gt;<br /> <br /> === In der Wissenschaft ===<br /> 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. [[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.&amp;nbsp;a. gibt es große Bibliotheken zur Forschung und Nutzung von [[Maschinelles Lernen|maschinellem Lernen]] und [[Deep Learning]] (''[[Künstliche Intelligenz]]'').<br /> <br /> == Ende von Python 2 ==<br /> Die Unterstützung für Python 2 ist beendet. Die finale 2er-Version war die 2.7.18 vom 20. April 2020;&lt;ref&gt;[https://pythoninsider.blogspot.com/2020/04/python-2718-last-release-of-python-2.html Python Insider: Python 2.7.18, the last release of Python 2]&lt;/ref&gt;&lt;ref&gt;[https://www.heise.de/developer/meldung/Lang-lebe-Python-3-Finales-Release-besiegelt-End-of-Life-fuer-Python-2-4706247.html Programmiersprachen: Lang lebe Python 3 – finales Release von Python 2]&lt;/ref&gt; seit diesem Datum wird Python 2 nicht mehr unterstützt.&lt;ref&gt;[https://www.python.org/psf/press-release/pr20191220/ Python 2 series to be retired by April 2020], Presseerklärung der Python Software Foundation, 20. Dezember 2019.&lt;/ref&gt;&lt;ref&gt;[https://www.golem.de/news/programmiersprache-python-2-7-bekommt-letztes-release-im-april-2020-1912-145785.html Python 2.7 bekommt letztes Release im April 2020], golem.de, 30. Dezember 2019.&lt;/ref&gt;<br /> Es gibt aber vielfältige und umfangreiche Dokumentationen zum Umstieg&lt;ref&gt;Offizielles HOWTO: https://docs.python.org/3.7/howto/pyporting.html&lt;/ref&gt;&lt;ref&gt;The Conservative Python 3 Porting Guide: https://portingguide.readthedocs.io/en/latest/&lt;/ref&gt;&lt;ref&gt;Supporting Python 3: An in-depth guide: http://python3porting.com/bookindex.html&lt;/ref&gt; und auch Tools, die bei der Migration helfen&lt;ref&gt;2to3: https://docs.python.org/2/library/2to3.html&lt;/ref&gt; oder es ermöglichen, Code zu schreiben, der mit Python 2 und 3 funktioniert.&lt;ref&gt;six: http://pypi.python.org/pypi/six/ und https://pythonhosted.org/six/&lt;/ref&gt;&lt;ref&gt;Python-Modernize: https://python-modernize.readthedocs.io/en/latest/&lt;/ref&gt;&lt;ref&gt;Python-Future/futurize: http://python-future.org/&lt;/ref&gt;&lt;ref&gt;Sixer: https://pypi.python.org/pypi/sixer&lt;/ref&gt;&lt;ref&gt;2to6: https://github.com/limodou/2to6&lt;/ref&gt;<br /> <br /> == Kritik ==<br /> 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ährigem Python-Entwickler&lt;ref&gt;{{Internetquelle |url=https://www.oreilly.com/pub/au/3082 |titel=A. M. Kuchling |sprache=en |abruf=2020-09-01}}&lt;/ref&gt;, als unelegant und nicht objektorientiert empfunden.&lt;ref name=&quot;KuchlingWarts&quot;&gt;{{Webarchiv |url=http://www.amk.ca/python/writing/warts.html |text= |wayback=20031002184114}}&lt;/ref&gt; Python-Schöpfer van Rossum verweist hingegen darauf, dass es nötig sei, um bestimmte wichtige Konstrukte zu ermöglichen.&lt;ref&gt;Guido van Rossum: [http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html Why explicit self has to stay]&lt;/ref&gt; Einer der Python-Grundsätze lautet zudem „Explicit is better than implicit“.&lt;ref name=&quot;Zen&quot; /&gt;<br /> <br /> 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&amp;nbsp;3.0 wurde dieser Kritikpunkt behoben.&lt;ref&gt;{{cite web|url=https://www.python.org/dev/peps/pep-3135/|title=PEP 3135 -- New Super|work=Python.org}}&lt;/ref&gt;<br /> <br /> 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.&lt;ref&gt;{{cite web|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}}&lt;/ref&gt;&lt;ref&gt;{{cite web|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}}&lt;/ref&gt;<br /> <br /> In den vorherrschenden Implementationen ist die Ausführungsgeschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,&lt;ref name=&quot;shootout-c&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=gpp|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; aber ähnlich wie bei [[Perl (Programmiersprache)|Perl]],&lt;ref name=&quot;shootout-perl&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=perl|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; [[PHP]],&lt;ref name=&quot;shootout-php-1&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=php|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; [[Dart (Programmiersprache)|Dart]]&lt;ref name=&quot;shootout-php-2&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=dart|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; und [[Ruby (Programmiersprache)|Ruby]].&lt;ref name=&quot;shootout-ruby&quot;&gt;{{cite web|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}}&lt;/ref&gt; Das liegt zum Teil daran, dass bei der Entwicklung von CPython der Klarheit des Codes gegenüber der Geschwindigkeit Vorrang eingeräumt wird.&lt;ref&gt;{{Toter Link| date= 2009-12-23 | url=http://www6.uniovi.es/python/dev/culture/ | text=Python Culture}}&lt;/ref&gt; 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,&lt;ref&gt;{{cite web|url=https://www.python.org/doc/essays/list2str/|title=Python Patterns – An Optimization Anecdote|work=Python.org}}&lt;/ref&gt; 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.<br /> <br /> == Literatur ==<br /> '''Für den Einstieg'''<br /> * {{Literatur<br /> |Autor=Allen B. Downey<br /> |Titel=Programmieren lernen mit Python<br /> |Auflage=2.<br /> |Verlag=O'Reilly<br /> |Ort=Köln (u.&amp;nbsp;a.)<br /> |Datum=2014<br /> |ISBN=978-3-95561-806-3<br /> |Seiten=297<br /> |Übersetzer=Stefan Fröhlich}}<br /> * {{Literatur<br /> |Autor=Bernd Klein<br /> |Titel=Einführung in Python 3. Für Ein- und Umsteiger<br /> |Auflage=2., überarb. und erw.<br /> |Verlag=Hanser<br /> |Ort=München<br /> |Datum=2014<br /> |ISBN=978-3-446-44133-0<br /> |Seiten=494<br /> |Online=[http://d-nb.info/1056934255/04 Inhaltsverzeichnis]}}<br /> * {{Literatur<br /> |Autor=Thomas Theis<br /> |Titel=Einstieg in Python. Ideal für Programmieranfänger geeignet<br /> |Auflage=4., akt. u. erw.<br /> |Verlag=Galileo Press<br /> |Ort=Bonn<br /> |Datum=2014<br /> |ISBN=978-3-8362-2861-9<br /> |Seiten=478<br /> |Online=[http://d-nb.info/1044867264/04 Inhaltsverzeichnis]}}<br /> * {{Literatur<br /> |Autor=Mark Lutz<br /> |Titel=Learning Python<br /> |Auflage=5.<br /> |Verlag=O'Reilly<br /> |Ort=Sebastopol (u.&amp;nbsp;a.)<br /> |Datum=2013<br /> |ISBN=978-1-4493-5573-9<br /> |Seiten=1540<br /> |Online=[https://cdn.oreillystatic.com/oreilly/booksamplers/9781449355739_sampler.pdf Inhaltsverzeichnis]}}<br /> * Hans Petter Langtangen: [http://www.springer.com/978-3-642-54958-8/ ''A Primer on Scientific Programming with Python.'']&lt;br /&gt;Springer, 4. Auflage 2014, ISBN 978-3-642-54958-8<br /> * Mark Pilgrim, Florian Wollenschein: ''Python 3 – Intensivkurs'', Springer, 1. Auflage 2010, ISBN 978-3-642-04376-5&lt;br /&gt;(Deutsche Übersetzung von Dive Into Python 3 [http://books.google.de/books?id=Va-HxHRndAUC&amp;printsec=frontcover&amp;dq=Python+3++Intensivkurs++Projekte+erfolgreich+realisieren&amp;hl=de&amp;ei=jEwfTeO2OMKDOuzP_f0I&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=1&amp;ved=0CCsQ6AEwAA#v=onepage&amp;q&amp;f=false bei google-books])<br /> * Mark Pilgrim: [http://www.diveintopython3.net/ ''Dive Into Python 3''] Springer, 2. Auflage 2009, ISBN 1-4302-2415-0 (Download verfügbar)<br /> * {{Literatur<br /> |Autor=John Paul Mueller<br /> |Titel=Python programmieren lernen für Dummies<br /> |Auflage=1.<br /> |Verlag=Wiley<br /> |Ort=Weinheim<br /> |Datum=2015<br /> |ISBN=978-3-527-71148-2<br /> |Seiten=379<br /> |Online=[http://d-nb.info/106110463X bei der Deutschen Nationalbibliothek]}}<br /> * {{Literatur<br /> |Hrsg=Martina Glöde<br /> |Titel=Programmieren supereasy. Einfacher Einstieg in Scratch und Python<br /> |Verlag=Dorling Kindersley<br /> |Ort=München<br /> |Datum=2015<br /> |ISBN=978-3-8310-2700-2<br /> |Seiten=224<br /> |Übersetzer=Birgit Reit}}<br /> * {{Literatur<br /> |Autor=Warren D. Sande; Carter Sande<br /> |Titel=Hello World! Programmieren für Kids und andere Anfänger<br /> |Auflage=2., akt. u. erw.<br /> |Verlag=Hanser<br /> |Ort=München<br /> |Datum=2014<br /> |ISBN=978-3-446-43806-4<br /> |Seiten=475<br /> |Übersetzer=Jürgen Dubau}}<br /> * 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.<br /> <br /> '''Referenzen'''<br /> * {{Literatur |Autor=Michael Weigend |Titel=Python ge-packt |Auflage=6. |Verlag=mitp |Ort=Frechen |Datum=2015 |ISBN=978-3-8266-8726-6 |Seiten=644}}<br /> * {{Literatur |Autor=Johannes Ernesti; Peter Kaiser |Titel=Python 3. Das umfassende Handbuch |Auflage=5., aktualisierte Auflage |Verlag=Rheinwerk |Ort=Bonn |Datum=2017 |ISBN=978-3-8362-5864-7 |Seiten= |Kommentar=OpenBook beim Verlag |Online=http://openbook.rheinwerk-verlag.de/python/index.html}}<br /> * {{Literatur |Autor=Mark Lutz |Titel=Python. Kurz &amp; gut |Auflage=5. |Verlag=O'Reilly |Ort=Köln (u.&amp;nbsp;a.) |Datum=2014 |ISBN=978-3-95561-770-7 |Seiten=270}}<br /> <br /> '''Weiterführendes'''<br /> * {{Literatur<br /> |Autor=Luciano Ramalho<br /> |Titel=Fluent Python. Clear, concise, and effective programming<br /> |Auflage=1.<br /> |Verlag=O’Reilly<br /> |Ort=Sebastopol CA (u.&amp;nbsp;a.)<br /> |Datum=2015<br /> |ISBN=978-1-4919-4600-8<br /> |Seiten=744<br /> |Online=[http://bvbr.bib-bvb.de:8991/exlibris/aleph/a22_1/apache_media/QDHFF57C5UX7TT18ESHPJBRN4BIRKL.pdf Inhaltsverzeichnis]}}<br /> * Gregor Lingl: ''Python für Kids'', bhv, 4. Auflage 2010, ISBN 3-8266-8673-X.<br /> * Farid Hajji: ''Das Python-Praxisbuch'', Addison-Wesley, 1. Auflage 2008, ISBN 978-3-8273-2543-3.<br /> * Hans P. Langtangen: ''Python Scripting for Computational Science'', Springer, 3. Auflage 2008, ISBN 3-540-43508-5.<br /> * Michael Weigend: ''Objektorientierte Programmierung mit Python'', mitp-Verlag, 1. Auflage 2006, ISBN 3-8266-0966-2.<br /> * {{Literatur<br /> |Autor=Felix Bittmann<br /> |Titel=Praxishandbuch Python 3. Konzepte der Programmierung verstehen und anwenden<br /> |Auflage=1.<br /> |Verlag=Books on Demand<br /> |Ort=Norderstedt<br /> |Datum=2020<br /> |ISBN=978-3-7519-0058-4<br /> |Seiten=240<br /> |Online=[https://www.bod.de/booksample?json=http%3A%2F%2Fwww.bod.de%2Fgetjson.php%3Fobjk_id%3D3088612%26hash%3Dc7f93fc149a3fb3c3f93e527763ece0c Inhaltsverzeichnis]}}<br /> <br /> == Weblinks ==<br /> {{Commonscat|Python (programming language)|Python}}<br /> {{Wikibooks|Python unter Linux|Python 2 unter Linux}}<br /> * [https://www.python.org/ Offizielle Website] (englisch)<br /> * [http://www.python-forum.de/ Das deutsche Python-Forum]<br /> <br /> === Tutorials ===<br /> ==== Für Anfänger ====<br /> * [https://pythonexamples.org/ Python Examples] (englisch)<br /> * [http://www.python-kurs.eu/index.php Python-Kurs.eu – Online-Kurse und Tutorials für Python 2 und 3]<br /> * [https://cscircles.cemc.uwaterloo.ca/using-website-de/ Online-Kurs der University of Waterloo] (deutsch/englisch/französisch)<br /> * Automate the Boring Stuff with Python: [https://automatetheboringstuff.com/ Practical programming for total beginners] (englisch)<br /> * [https://datamics.com/online-kurse/python-das-python-grundlagen-bootcamp-von-0-auf-100/ Python Online Kurs]<br /> * [https://lerne-python.de/ Python Tutorial]<br /> <br /> ==== Für Fortgeschrittene ====<br /> * PythonProgramming.net: [https://pythonprogramming.net/ Python-Tutorials für Data analysis, Machine learning &amp; GUIs] (englisch)<br /> * PyData: [https://www.youtube.com/user/PyDataTV/ Python-Vorträge und -Tutorials für Data analysis, Machine learning etc.] (englisch)<br /> * Awesome Python: [https://awesome-python.com/ Liste von Frameworks, Bibliotheken und Ressourcen, nach Themen gegliedert] (englisch)<br /> * Python 3 – Das umfassende Handbuch: [https://openbook.rheinwerk-verlag.de/python/ Rheinwerk openbook zu Python 3] (deutsch)<br /> <br /> ==== Für Kinder ====<br /> * [http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/ Snake Wrangling for Kids – Learning to Program with Python] von Jason R. Briggs, für Kinder ab acht Jahren, [[Creative Commons]] Lizenz (englisch)<br /> * [https://biologie-lernprogramme.de/daten/media/swfk-de-win-2012-02.pdf Schlangengerangel für Kinder – Programmieren Lernen für Kinder], für Kinder ab acht Jahren, [[Creative Commons]] Lizenz (deutsch)<br /> <br /> == Einzelnachweise ==<br /> &lt;references responsive&gt;<br /> &lt;ref name=&quot;Zen&quot;&gt;<br /> {{Internetquelle<br /> |autor=Tim Peters<br /> |url=http://legacy.python.org/dev/peps/pep-0020/<br /> |titel=The Zen of Python<br /> |hrsg=Python Software Foundation<br /> |datum=2004-08-19<br /> |sprache=en<br /> |abruf=2014-08-12}}<br /> &lt;/ref&gt;<br /> &lt;/references&gt;<br /> <br /> {{Gesprochene Version<br /> |datei=Python (Programmiersprache).ogg<br /> |länge=20.30 min<br /> |größe=13,0 MB<br /> |version=68824020<br /> |datum=5. Januar 2010<br /> }}<br /> {{Lesenswert|23. Oktober 2005|10220285}}<br /> <br /> {{Normdaten|TYP=s|GND=4434275-5|LCCN=sh96008834}}<br /> <br /> [[Kategorie:Python (Programmiersprache)| ]]<br /> [[Kategorie:Skriptsprache]]<br /> [[Kategorie:Objektorientierte Programmiersprache]]<br /> [[Kategorie:Imperative Programmiersprache]]<br /> [[Kategorie:Funktionale Programmiersprache]]</div> CommunityEditorSS https://de.wikipedia.org/w/index.php?title=Data_Science&diff=210483411 Data Science 2021-04-02T18:20:07Z <p>CommunityEditorSS: Info hinzugefügt</p> <hr /> <div>'''Data Science''' (von {{enS}} ''data'' „Daten“ und ''science'' „Wissenschaft“, im Deutschen auch '''Datenwissenschaft''') bezeichnet generell die Extraktion von [[Wissen]] aus Daten.&lt;ref&gt;Dhar, V. (2013): ''Data science and prediction''. Communications of the ACM 56 (12): 64. {{doi|10.1145/2500499}}&lt;/ref&gt;&lt;ref&gt;Jeff Leek (12. Dezember 2013): ''The key word in &quot;Data Science&quot; is not Data, it is Science''. Simply Statistics.&lt;/ref&gt;<br /> <br /> Data Science ist ein interdisziplinäres Wissenschaftsfeld, welches wissenschaftlich fundierte Methoden, Prozesse, [[Algorithmus|Algorithmen]] und Systeme zur Extraktion von Erkenntnissen, Mustern und Schlüssen sowohl aus strukturierten als auch unstrukturierten Daten ermöglicht&lt;ref&gt;{{Internetquelle |autor=Vasant Dhar |url=https://cacm.acm.org/magazines/2013/12/169933-data-science-and-prediction/abstract |titel=Data Science and Prediction {{!}} December 2013 {{!}} Communications of the ACM |zugriff=2018-06-19}}&lt;/ref&gt;&lt;ref&gt;{{Internetquelle |url=https://simplystatistics.org/2013/12/12/the-key-word-in-data-science-is-not-data-it-is-science/ |titel=The key word in &quot;Data Science&quot; is not Data, it is Science · Simply Statistics |zugriff=2018-06-19 |sprache=en}}&lt;/ref&gt;.<br /> <br /> Der Studiengang ''Data Science'' verwendet Techniken und Theorien aus den Fächern Mathematik, [[Statistik]] und Informationstechnologie, einschließlich der [[Signalverarbeitung]], verwendet Wahrscheinlichkeitsmodelle des [[Maschinenlernen|maschinellen Lernens]], des statistischen Lernens, der [[Programmierung]], der Datentechnik, der [[Mustererkennung]], der [[Prognostik]], der Modellierung von Unsicherheiten und der Datenlagerung.<br /> <br /> Personen, die im Bereich Data Science arbeiten, werden als '''Data Scientist''' bzw. '''Datenwissenschaftler''' bezeichnet, wobei meist speziellere oder Spezialisierungen anderer, übergeordneter Berufsbezeichnungen üblich sind (z.&amp;nbsp;B. Statistiker, Informatiker).<br /> <br /> == Geschichte ==<br /> Der Begriff „Data Science“ existiert seit über 40 Jahren und wurde ursprünglich als Ersatz für den Begriff „Informatik“ von [[Peter Naur]] im Jahr 1960 verwendet. 1974 veröffentlichte Naur in der ''Concise Survey of Computer Methods'' eine Umfrage über die zeitgenössische Datenverarbeitung, in welcher der Begriff „Data Science“ frei verwendet wurde.<br /> <br /> 1996 trafen sich die Mitglieder der ''International Federation of Classification Societies'' (IFCS) in [[Kobe]] für ihre zweijährliche Konferenz. Bei dieser Konferenz war zum ersten Mal der Begriff „Data Science“ im Titel der Konferenz enthalten.&lt;ref&gt;Forbes, Gil Press: ''A Very Short History of Data Science''. Mai 2013 (englisch).&lt;/ref&gt;<br /> <br /> Die moderne Definition von ''Data Science'' wurde erstmals im Rahmen des zweiten japanisch-französischen Statistiksymposiums an der Universität Montpellier&amp;nbsp;II (Frankreich) im Jahr 1992 entworfen.&lt;ref name=&quot;Escoufier&quot;&gt;{{Cite book |language=englisch |author=Escoufier et al., editors |title=Data Science and its Application |chapter=Preface |location=Tokyo |publisher=Academic Press |date=1995 |isbn=0-12-241770-4}}&lt;/ref&gt; Die Teilnehmer würdigten die Entstehung einer neuen Disziplin mit einem besonderen Fokus auf Daten aus verschiedenen Herkünften, Dimensionen, Typen und Strukturen. Sie prägten die Kontur dieser neuen Wissenschaft, die auf etablierten Konzepten und Prinzipien der Statistik und Datenanalyse basiert, unter weitgehender Nutzung der zunehmenden Macht der Computerwerkzeuge.<br /> <br /> Im November 1997 gab C. F. Jeff Wu den Eröffnungsvortrag mit dem Titel „Statistik = Datenwissenschaft?“&lt;ref name=&quot;Wu97&quot;&gt;Wu, C. F. J. (1997): ''Statistics = Data Science?''. Abgerufen am 9. Oktober 2014.&lt;/ref&gt; für seine Ernennung zum ''H. C. Carver Professor of Statistics'' an der [[University of Michigan]].&lt;ref&gt;''Identity of statistics in science examined''. The University Records, 9. November 1997, The University of Michigan. Abgerufen am 12. August 2013.&lt;/ref&gt; In diesem Vortrag charakterisierte er die statistische Arbeit als eine Trilogie von Datenerfassung, Datenmodellierung und -analyse und die Entscheidungsfindung. Abschließend rief er den Begriff „Datenwissenschaft“ ins Leben und befürwortete, dass die Statistik in „Datenwissenschaft“ und Statistiker in „Datenwissenschaftler“ umbenannt werden.&lt;ref name=&quot;Wu97&quot; /&gt; Später präsentierte er einen Vortrag mit dem Titel „Statistik = Datenwissenschaft?“, als ersten von seinen Mahalanobis-Memorial-Vorträgen.&lt;ref&gt;''P. C. Mahalanobis Memorial Lectures, 7th series''. P. C. Mahalanobis Memorial Lectures, Indian Statistical Institute. Abgerufen am 18.&amp;nbsp;August 2013.&lt;/ref&gt; Diese Vorträge ehren [[Prasanta Chandra Mahalanobis]], einen indischen Wissenschaftler, Statistiker und Gründer des „Indian Statistical Instituts“.<br /> <br /> 2001 führte William S. Cleveland die Datenwissenschaft als eigenständige Disziplin in seinem Artikel „Data Science: An Action Plan for Expanding the Technical Areas of the Field of Statistics“ ein. In seinem Bericht stellte Cleveland sechs für ihn umfassende Gebiete der Datenwissenschaft vor: multidisziplinäre Untersuchungen, Modelle und Methoden für Daten, Rechnen mit Daten, Pädagogik, Werkzeug-Bewertung und Theorie.<br /> <br /> Im April 2002 veröffentlichte der internationale Rat für Wissenschaft: Ausschuss für die Daten für Wissenschaft und Theorie, das Data Science Journal&lt;ref&gt;Data Science Journal. (2012, April). Available Volumes. Abgerufen von Japan Science and Technology Information Aggregator, Electronic: {{Webarchiv|text=online |url=http://www.jstage.jst.go.jp/browse/dsj/_vols |wayback=20120403153707 |archiv-bot=2018-04-05 17:38:49 InternetArchiveBot }}&lt;/ref&gt;, welche sich auf die Problematik, wie die Beschreibung von Datensystemen, ihre Veröffentlichung im Internet, Anwendungen und gesetzlichen Problemen konzentrierte.&lt;ref&gt;Data Science Journal. (2002, April). Contents of Volume 1, Issue 1, April 2002. Abgerufen von Japan Science and Technology Information Aggregator, Electronic: [http://www.jstage.jst.go.jp/browse/dsj/1/0/_contents online]&lt;/ref&gt;<br /> <br /> Kurz darauf begann die [[Columbia University]] 2003 die Zeitschrift „The Journal of Data Science“&lt;ref&gt;The Journal of Data Science. (2003, January). Contents of Volume 1, Issue 1, January 2003. Abgerufen von http://www.jds-online.com/v1-1&lt;/ref&gt; zu veröffentlichen, welche eine Plattform für alle Datenanbieter zur Verfügung stellte um ihre Ansichten und Ideen zum Austausch zu präsentieren. Die Zeitschrift wurde größtenteils der Anwendung von statistischen Methoden und der quantitativen Forschung gewidmet.<br /> <br /> 2005 veröffentlichte das National Science Board den Bericht „Long-lived Digital Data Collections: Enabling Research and Education in the 21st Century“, in welchem unter dem Begriff Data Scientists verschiedene Experten aufgeführt werden, die von entscheidender Bedeutung für das erfolgreiche Management digitalen Daten sind. Genannt werden unter anderem Informatiker, Datenbankexperten, Programmierer, Domänenexperten, [[Bibliothekar]]e, Archivare sowie Experten im Bereich Software Engineering. Als Teil der Verantwortlichkeiten von Data Scientists wird insbesondere die Entwicklung innovativer Konzepte in den Bereichen Datenbanktechnologie und Informationswissenschaft betont. Hierunter fallen auch Methoden der [[Informationsvisualisierung]], Datenanalyse und Wissensentdeckung in Datenbanken.&lt;ref&gt;[http://www.nsf.gov/pubs/2005/nsb0540/ National Science Board: Long-Lived Digital Data Collections Enabling Research and Education in the 21st Century], National Science Foundation, abgerufen am 7. Juli 2016.&lt;/ref&gt;<br /> <br /> == Das Berufsfeld ==<br /> Weltweit besteht ein Mangel an Experten in dem Bereich der Datenanalyse.&lt;ref&gt;[http://derstandard.at/2000012040062/Grosse-Nachfrage-nach-Data-Scientists ''Große Nachfrage nach Data Scientists''], derStandard.at vom 26. Februar 2015, abgerufen am 28. Februar 2015.&lt;/ref&gt;&lt;ref&gt;[http://de.statista.com/infografik/3234/daten-und-fakten-rund-um-den-beruf-data-scientist/ ''Traumberuf Data Scientist''], statista.com vom 19. Februar 2015, abgerufen am 28. Februar 2015.&lt;/ref&gt;<br /> <br /> === Anforderungen ===<br /> Ein Data Scientist sollte überzeugend und kreativ sein, aber auch ein gewisses Kommunikationstalent mitbringen, um sich mit verschiedenen Ebenen einer Organisation austauschen zu können. Er ist das Bindeglied und der Vermittler zwischen allen Ebenen eines Unternehmens und nimmt somit die Rolle des „Übersetzers“ ein, indem er die Ergebnisse für die einzelnen Fachabteilungen genauso verständlich aufbereitet wie für das Top Management. Zudem sollte ein Data Scientist aufgeschlossen genug sein, um neue Analysetools und innovative Analyseverfahren zu erforschen und zu nutzen. Unvoreingenommen sollte ein Data Scientist nach anderen Ansätzen suchen wollen und immer neue Fragen stellen. Zusätzlich setzt dieser Beruf ein gewisses Koordinationstalent voraus, nicht zuletzt weil bestimmte Aufgaben, wie zum Beispiel die Beschaffung der Daten, an andere Mitarbeiter delegiert werden können. Kontrolle und Steuerung sollten jedoch immer in der Hand des Data Scientisten bleiben.&lt;ref&gt;[http://www.de.capgemini-consulting.com/blog/digital-transformation-blog/2014/01/data-scientists-die-begehrtesten-alleskonner-des-21 ''Data Scientists – Die begehrtesten Alleskönner des 21. Jahrhunderts''], capgemini.com vom 20. Januar 2014, abgerufen am 28. Februar 2015.&lt;/ref&gt;<br /> <br /> === Aufgabenbereich ===<br /> Der Job eines Data Scientist ist es, aus großen Datenmengen Informationen zu generieren und Handlungsempfehlungen abzuleiten, die das Unternehmen befähigen, effizienter zu arbeiten. Dazu bedient er sich innovativer Analysetools und entwickelt Abfragen, die aus unübersichtlichen Datenmengen wertvolle Informationen destillieren. Anschließend werden Hypothesen abgeleitet, welche statistisch überprüft und für das Management als Entscheidungsgrundlage aufbereitet werden.<br /> <br /> === Ausbildungsmöglichkeiten ===<br /> Im deutschen Sprachraum bieten verschiedene Hochschulen auf Data Science spezialisierte Studiengänge an. Der Schwerpunkt liegt dabei auf Masterstudiengängen, inzwischen werden aber auch Bachelorstudiengänge angeboten. Darüber hinaus gibt es spezialisierte Weiterbildungsangebote sowie berufsbegleitende Studiengänge.<br /> <br /> '''Bachelorstudiengänge:''' Die [[Technische Universität Dortmund]] bietet seit dem Wintersemester 2002/2003 den Bachelorstudiengang Datenanalyse und Datenmanagement an.&lt;ref&gt;{{Internetquelle |url=https://www.statistik.tu-dortmund.de/bachelor_datenanalyse.html |titel=Fakultät Statistik - Bachelor Datenanalyse und Datenmanagement |zugriff=2018-09-14 |sprache=de-DE}}&lt;/ref&gt; Die [[Philipps-Universität Marburg]] und die [[Universität Stuttgart]] bieten ab dem Wintersemester 2016/2017 die deutschlandweit ersten Bachelorstudiengänge mit dem Namen ''Data Science'' an.&lt;ref&gt;{{Internetquelle|url=http://www.informatik.uni-stuttgart.de/studium/interessierte/bsc-studiengaenge/datascience/index.html|titel=Universität Stuttgart, Fachbereich Informatik – Data Science|autor=|hrsg=|werk=|datum=|sprache=|zugriff=2016-07-04}}&lt;/ref&gt;&lt;ref name=&quot;Marburg&quot;&gt;{{Internetquelle|url=http://www.uni-marburg.de/fb12/studium/studiengaenge|titel=Philipps-Universität Marburg, Fachbereich Mathematik und Informatik – Studiengänge|autor=|hrsg=|werk=|datum=|sprache=|zugriff=2016-06-13}}&lt;/ref&gt; Die [[Technische Hochschule OWL]] in [[Lemgo]] bietet den Bachelorstudiengang Data Science an, der auch als [[Duales Studium]] absolviert werden kann.&lt;ref&gt;{{Internetquelle|url=https://www.hs-owl.de/fb5/studiengaenge/bsc-data-science.html|titel=Technische Hochschule Ostwestfalen-Lippe, Fachbereich Elektrotechnik und Technische Informatik |autor=|hrsg=|werk=|datum=|sprache=|zugriff=2018-03-20}}&lt;/ref&gt; Die [[University of Applied Sciences Europe -BiTS und BTK]] bietet den Bachelor-Studiengang ''Digital Business &amp; Data Science'' an.&lt;ref name=&quot;University of Applied Sciences Europe&quot;&gt;{{Internetquelle|url=http://www.bits-hochschule.de/de/studium/digital-business-data-science/|titel=Bachelor-Studium Digital Business &amp; Data Science (B.Sc.)|werk=Hochschule für Angewandte Wissenschaften Europa - Iserlohn · Berlin · Hamburg|zugriff=2018-05-07}}&lt;/ref&gt; Die [[Georg-August-Universität Göttingen]] bietet ab dem Wintersemester 2018/2019 die Bachelorstudiengänge Angewandte Data Science und Mathematical Data Science an.&lt;ref&gt;{{Internetquelle |autor=Georg-August-Universität Göttingen - Öffentlichkeitsarbeit |url=http://www.uni-goettingen.de/de/578885.html |titel=Angewandte Data Science (B.Sc.) - Georg-August-Universität Göttingen |zugriff=2018-04-27 |sprache=de}}&lt;/ref&gt;&lt;ref&gt;{{Internetquelle |autor=Georg-August-Universität Göttingen - Öffentlichkeitsarbeit |url=http://www.uni-goettingen.de/de/578300.html |titel=Mathematical Data Science (B.Sc.) - Georg-August-Universität Göttingen |zugriff=2018-04-27 |sprache=de}}&lt;/ref&gt; An der [[Westsächsische Hochschule Zwickau|Westsächsischen Hochschule Zwickau]] wird ab dem Wintersemester 2018/2019 erstmals in den neuen Bundesländern ein Bachelorstudiengang Data Science angeboten. Die ebenfalls in Sachsen gelegene [[Hochschule Mittweida]] hat zeitgleich eine gleichnamige Vertiefungsrichtung in ihrem Bachelorstudiengang Wirtschaftsingenieurwesen eingeführt.&lt;ref&gt;{{Internetquelle|url=https://www.wi.hs-mittweida.de/studium/studienangebote/wirtschaftsingenieurwesen-bachelor.html|titel=Hochschule Mittweida, Fakultät Wirtschaftsingenieurwesen: Wirtschaftsingenieurwesen (Bachelor) |autor=|hrsg=|werk=|datum=|sprache=|zugriff=2020-02-20}}&lt;/ref&gt; An der [[Hochschule Stralsund]] ist Data Science seit 2015 ein wesentlicher Bestandteil der Lehre im Studiengang ''Wirtschaftsinformatik''.&lt;ref&gt;{{Internetquelle |url=https://www.hochschule-stralsund.de/winfb/ |titel=Wirtschaftsinformatik Bachelor - Hochschule Stralsund |abruf=2020-06-12}}&lt;/ref&gt;<br /> <br /> '''Masterstudiengänge:''' Die [[Philipps-Universität Marburg]] bietet neben dem Bachelorstudiengang auch einen Masterstudiengang ''Data Science'' an.&lt;ref name=&quot;Marburg&quot; /&gt; An der [[Hochschule für Technik und Wirtschaft Berlin]] wird ab dem Wintersemester 2016/17 ein Studiengang angeboten, der sich gemeinsam mit dem Projekt Management diesem Schwerpunkt widmet.&lt;ref&gt;[http://mpmd.htw-berlin.de/ ''HTW Berlin: Project Management &amp;amp; Data Science'']. Abgerufen am 11. März 2016.&lt;/ref&gt; Die [[Hochschule Darmstadt]] bietet ab dem Wintersemester 2016/2017 einen Masterstudiengang ''Data Science'' an, der gemeinsam von den Fachbereichen Informatik sowie Mathematik und Naturwissenschaften betrieben wird.&lt;ref&gt;[http://fbmn.h-da.de/index.php/Studienangebote/DataScience ''Hochschule Darmstadt, FB I und FB MN: Masterstudiengang Data Science'']. Abgerufen am 28. April 2016.&lt;/ref&gt; An der [[Ludwig-Maximilians-Universität München]] wird ein Masterstudiengang ''Data Science'' angeboten&lt;ref&gt;{{Internetquelle|url=https://www.uni-muenchen.de/studium/studienangebot/studiengaenge/studienfaecher/data_science/master1/index.html|titel=Data Science (Master)|autor=|hrsg=|werk=|datum=2016-08-10|sprache=de|zugriff=2016-11-22}}&lt;/ref&gt;, der vom [[Elitenetzwerk Bayern]] gefördert wird.&lt;ref&gt;[https://www.uni-muenchen.de/studium/news/2015/data_science.html Neuer Masterstudiengang Data Science], auf www.uni-muenchen.de&lt;/ref&gt; An der [[Leuphana Universität Lüneburg]] wird der Masterstudiengang ''Management &amp; Data Science'' angeboten.&lt;ref&gt;[http://www.leuphana.de/studium/master/management-data-science.html ''Leuphana Universität Lüneburg: Management &amp;amp; Data Science'']. Abgerufen am 28. Februar 2015.&lt;/ref&gt; Die [[Universität Linz]] bietet ein Wirtschaftsinformatikstudium mit Schwerpunkt auf ''Business Intelligence &amp; Data Science'' an.&lt;ref&gt;[http://futurezone.at/science/data-science-als-neuer-studiengang-an-der-uni-linz/73.165.200 ''Data Science als neuer Studiengang an der Uni Linz''], futurezone vom 19. August 2014, abgerufen am 28. Februar 2015.&lt;/ref&gt; An der [[Technische Universität Dortmund|Technischen Universität Dortmund]] wird seit dem Wintersemester 2002/2003 das Masterstudium ''Datenwissenschaft'' angeboten.&lt;ref&gt;''[https://www.statistik.tu-dortmund.de/master_datenwissenschaft.html Technische Universität Dortmund - Masterstudium Datascience]''. Abgerufen am 28. Februar 2015.&lt;/ref&gt; An der [[Otto-von-Guericke-Universität Magdeburg]] gibt es das Masterstudium ''Data and Knowledge Engineering''.&lt;ref&gt;[http://www.cs.uni-magdeburg.de/mdke.html ''Otto-von-Guericke Universität Magdeburg - Data and Knowledge Engineering'']. Abgerufen am 28. Februar 2015.&lt;/ref&gt; An der [[Friedrich-Schiller-Universität Jena]] wird das Masterstudium ''Computational and Data Science'' gelehrt.&lt;ref&gt;[http://www.cds.uni-jena.de/ ''Friedrich-Schiller-Universität Jena – Masterstudium Computational and Data Science'']. Abgerufen am 28. Februar 2015.&lt;/ref&gt; An der [[Beuth Hochschule für Technik Berlin|Beuth-Hochschule für Technik Berlin]] gibt es den englischsprachigen ''Master in Data Science'' mit dem Ausbildungsziel Data Science bzw. Data Engineering&lt;ref&gt;{{Internetquelle|url=http://data-science.berlin/|titel=Data Science Beuth Hochschule|sprache=en|zugriff=2017-05-31}}&lt;/ref&gt;. Die [[Paris Lodron Universität Salzburg]] bietet als erste österreichische Universität ab Wintersemester 2016 das viersemestrige Masterstudium ''Data Science'' an.&lt;ref&gt;[https://science.apa.at/rubrik/bildung/Erstes_Data_Science_Masterstudium_startet_an_Uni_Salzburg/SCI_20160822_SCI39411351831565760/ APA – Erstes Data Science Masterstudium startet in Salzburg]. Abgerufen am 12. September 2016.&lt;/ref&gt;&lt;ref name=&quot;sb&quot;&gt;[http://datascience.sbg.ac.at/ ''Universität Salzburg – Data Science'']. Abgerufen am 12. September 2016.&lt;/ref&gt; 2016 präsentierte die Universität Mannheim den Studiengang Data Science als ihren neuesten Zuwachs. Seit dem Wintersemester 2017/2018 wird an der [[Hochschule Offenburg|Hochschule für Technik, Wirtschaft und Medien Offenburg]] im Masterstudiengang ''Informatik'' der Schwerpunkt ''Data Science &amp; Analytics'' angeboten.&lt;ref&gt;{{Internetquelle|url=https://ei.hs-offenburg.de/studium/master/informatik-master-infm/studienverlauf/|titel=Informatik Master – Studienverlauf|hrsg=[[Hochschule Offenburg]]|zugriff=2018-07-27}}&lt;/ref&gt;<br /> Die [[TU Chemnitz]] bietet seit dem Wintersemester 2018/19 einen Masterstudiengang ''Data Science'' an, getragen von den Fakultäten Mathematik und Informatik, mit Schwerpunkt auf den mathematischen Grundlagen von Big Data und statistischem Lernen&lt;ref&gt;{{Internetquelle|url=https://www.tu-chemnitz.de/mathematik/ds/|titel=Data Science TU Chemnitz|sprache=de|zugriff=2020-11-28}}&lt;/ref&gt;.<br /> Die [[RWTH Aachen]] bietet einen englischsprachigen Masterstudiengang ''Data Science'' an.&lt;ref&gt;{{Internetquelle |autor=RWTH Aachen University |url=http://www.rwth-aachen.de/cms/root/Studium/Vor-dem-Studium/Studiengaenge/Liste-Aktuelle-Studiengaenge/Studiengangbeschreibung/~pzpc/Data-Science-M-Sc/ |titel=Data Science M.Sc. - RWTH AACHEN UNIVERSITY - Deutsch |zugriff=2018-11-12 |sprache=de}}&lt;/ref&gt; Die [[Nordakademie|NORDAKADEMIE]] bietet ab April 2021 einen Masterstudiengang ''Applied Data Science'' an.&lt;ref&gt;{{Internetquelle |autor=NORDAKADEMIE |url=https://www.nordakademie.de/berufsbegleitend-studieren/data-science |titel=Applied Data Science M.Sc. - NORDAKADEMIE - Deutsch |zugriff=2020-11-25 |sprache=de}}&lt;/ref&gt; In der Deutschschweiz bietet das [[Institut für berufliche Aus- und Weiterbildung|IBAW]] die Ausbildung als [[Nachdiplomkurs]] an, der Abschluss «Data Science NDK HF» kann berufsbegleitend erworben werden.&lt;ref&gt;{{Internetquelle |autor=IBAW |url=https://ibaw.ch/bildungsangebote/informatik/data-science/ |titel=Studiengang Data Science |werk= |hrsg=IBAW |datum= |abruf=17.12.2020 |sprache=de}}&lt;/ref&gt;<br /> <br /> Die RWTH Aachen bietet einen Master-Studiengang in ''Medical Data Science'' an. Berufsbegleitend kann ein Masterabschluss in ''Medical Data Science'' in Heidelberg und Mannheim erworben werden. Seit dem Wintersemester 2019/2020 bietet die Fachhochschule Bielefeld am Standort Gütersloh den ''Forschungsmaster Data Science'' an.<br /> <br /> '''Doktoratsstudiengänge:''' Parallel zur Einführung des Masterstudiums ''Data Science'' hat die Paris Lodron Universität Salzburg das Doktoratskolleg ''Statistics and Applied Data Science'' eingerichtet und bietet ab Wintersemester 2016 auch die Möglichkeit, im Bereich Data Science zu promovieren. Je nach Dissertationsthema können Dissertanten und Dissertantinnen dabei ein Doktorat in den Naturwissenschaften oder in den technischen Wissenschaften erwerben.&lt;ref name=&quot;sb&quot; /&gt;<br /> <br /> '''Berufsbegleitende Studiengänge und Weiterbildungsangebote:''' Den ersten berufsbegleitenden Masterstudiengang im deutschsprachigen Raum in ''Data Science'' bietet die [[Hochschule Albstadt-Sigmaringen]] seit Oktober 2015 an.&lt;ref&gt;[http://www.data-science-studieren.de/ ''Hochschule Albstadt-Sigmaringen – Studiengang Data Science'']. Abgerufen am 11. Juni 2015.&lt;/ref&gt;<br /> Einen weiteren berufsbegleitenden Masterstudiengang in ''Data Science and Business Analytics'' bietet die [[Hochschule der Medien]] Stuttgart an.&lt;ref&gt;[http://www.hdm-stuttgart.de/ds ''Hochschule der Medien Stuttgart – Data Science'']. Abgerufen am 1. Juli 2016.&lt;/ref&gt; Außerdem bietet das [[Fraunhofer-Institut für Intelligente Analyse- und Informationssysteme]] (IAIS) Schulungen für Data Scientists an.&lt;ref&gt;[http://www.iais.fraunhofer.de/data-scientist.html ''Fraunhofer-Institut für Intelligente Analyse- und Informationssysteme – Data-Scientist-Schulungen'']. Abgerufen am 28. Februar 2015.&lt;/ref&gt; Die [[EMC Corporation#EMC Academic Alliance (EAA)|EMC Academic Alliance]] bietet ein Curriculum ''Data Science and Big Data Analytics'' an. Die [[Technische Hochschule Brandenburg]] bietet gemeinsam mit dem AWW e. V. einen weiterbildenden Zertifikatskurs „Data Science“ an.&lt;ref&gt;{{Internetquelle|url=http://fh-brandenburg.de/datascience.html |titel=Zertifikatskurs „Data Science (FH)“ |werk=[[Fachhochschule Brandenburg]] |hrsg=Fachhochschule Brandenburg |datum=2015-08-13 |zugriff=2015-09-03}}&lt;/ref&gt; Die [[Fachhochschule Südwestfalen]] bietet den berufsbegleitenden Masterstudiengang Studiengang Data Science an.&lt;ref&gt;{{Internetquelle|url=https://www4.fh-swf.de/de/home/studieninteressierte/studienangebote/stg_me/data_science__m_sc__/data_science__m_sc__1.php |titel=Data Science (M.Sc.) (berufsbegleitend) |werk=[[Fachhochschule Südwestfalen]] |hrsg=Fachhochschule Südwestfalen|zugriff=2021-03-01}}&lt;/ref&gt;<br /> <br /> === Branchen ===<br /> In allen Branchen werden heute große Datenmengen ausgewertet. Der Mangel an Data Scientists macht es für Unternehmen schwierig, die Daten richtig zu nutzen und konkret Erkenntnisse daraus zu ziehen. Daten werden als das „neue Gold“ gehandelt. Zudem ist der Markt an Spezialisten, die mit Datenarchitekturen und Datenmodellen umgehen können, fast nicht existent.<br /> <br /> Auch in der [[Logistik]]branche werden zukünftig immer mehr Data Scientists gesucht.<br /> <br /> Eine weitere Branche ist die Gesundheitsbranche. Durch die genaue Analyse von Daten aus einem Krankenhausaufenthalt könnten individualisierte Behandlungen ([[Personalisierte Medizin]]) durch Ähnlichkeitsanalysen von Patientendaten abgeleitet und Medikationspläne optimiert werden.<br /> <br /> In der Handelsbranche kann das Kaufverhalten der Menschen analysiert werden, um im weiteren Verlauf die Ursachen für Retouren herauszuarbeiten. So kann die Anzahl an Warenrücksendungen reduziert werden.<br /> <br /> == Siehe auch ==<br /> * Datenvisualisierung, siehe [[Visualisierung]]<br /> * [[Informationswissenschaft]]<br /> * [[Datenmanagement]]<br /> <br /> == Literatur ==<br /> * Maren Lübcke, [[Klaus Wannemacher]]: ''Vermittlung von Datenkompetenzen an den Hochschulen: Studienangebote im Bereich Data Science''. HIS-HE, Hannover 2018. URL: [https://his-he.de/fileadmin/user_upload/Publikationen/Forum_Hochschulentwicklung/Forum_HE_201801_Web.pdf his-he.de] (PDF)<br /> * Cathy O’Neil, Rachel Schutt: ''Doing Data Science: Straight Talk from the Frontline''. O’Reilly 2013. ISBN 1449358659.<br /> * [[John W. Tukey]] (1962): ''The future of data analysis''. Annals of Mathematical Statistics, Bd. 33, S. 1–67.<br /> * John D. Kelleher, Brendan Tierney: ''Data Science'', The MIT Press Essential Knowledge Series, The MIT Press 2018, ISBN 9780262535434<br /> * Johannes Kröckel: ''Data Analytics in Produktion und Logistik''. Vogel Communications Group 2019. ISBN 978-3-8343-3419-0.<br /> <br /> == Weblinks ==<br /> * [http://www.datenbanken-verstehen.de/business-intelligence/data-science-grundlagen/data-science/ Data Science – Was ist Data Science?]<br /> * [[b:en:Data Science: An Introduction|Data Science: An Introduction]]<br /> * [http://www.ratswd.de/download/RatSWD_WP_2010/RatSWD_WP_144.pdf Data Librarianship]<br /> * [http://pubman-days.mpdl.mpg.de/wp-content/uploads/2013/12/pubmandays_bertelmann.pdf Data Science und Bibliotheken]<br /> * [http://datasciencemasters.org/ datasciencemasters.org]<br /> * [http://blog.alexa.com/know-data-science-important/ blog.alexa.com/know-data-science-important]<br /> * [https://intellipaat.com/data-scientist-course-training/ Online Data Scientist Course]<br /> * [http://www.datascienceassn.org/code-of-conduct.html Data Science Association: Code of Conduct]<br /> * [https://datamics.com/online-kurse/python-fuer-data-science-machine-learning-visualization/ Data Science Online Kurs mit Python]<br /> == Einzelnachweise ==<br /> &lt;references responsive /&gt;<br /> <br /> [[Kategorie:Datenstruktur]]<br /> [[Kategorie:Wissen]]<br /> [[Kategorie:Angewandte Informatik]]</div> CommunityEditorSS https://de.wikipedia.org/w/index.php?title=SQL&diff=210483327 SQL 2021-04-02T18:17:21Z <p>CommunityEditorSS: Info hinzugefügt</p> <hr /> <div>{{Dieser Artikel|behandelt die Datenbanksprache. Zu weiteren Bedeutungen siehe [[SQL (Begriffsklärung)]].}}<br /> <br /> '''SQL''' (offizielle Aussprache [{{IPA|ɛskjuːˈɛl}}], oft aber auch [{{IPA|ˈsiːkwəl}}] nach dem Vorgänger SEQUEL; auf Deutsch auch häufig die deutsche Aussprache der Buchstaben) ist eine [[Datenbanksprache]] zur Definition von [[Datenstruktur]]en in [[Relationale Datenbank|relationalen Datenbanken]] sowie zum Bearbeiten (Einfügen, Verändern, Löschen) und Abfragen von darauf basierenden Datenbeständen.<br /> <br /> Die Sprache basiert auf der [[Relationale Algebra|relationalen Algebra]], ihre [[Syntax]] ist relativ einfach aufgebaut und [[Formale Semantik|semantisch]] an die englische Umgangssprache angelehnt. Ein gemeinsames Gremium von [[Internationale Organisation für Normung|ISO]] und [[International Electrotechnical Commission|IEC]] [[Standardisierung|standardisiert]] die Sprache unter Mitwirkung nationaler Normungsgremien wie [[American National Standards Institute|ANSI]] oder [[Deutsches Institut für Normung|DIN]]. Durch den Einsatz von SQL strebt man die Unabhängigkeit der Anwendungen vom eingesetzten [[Datenbank#Datenbankmanagementsystem|Datenbankmanagementsystem]] an.<br /> <br /> Die Bezeichnung ''SQL'' wird im allgemeinen Sprachgebrauch als Abkürzung für „'''Structured Query Language'''“ (auf Deutsch: „Strukturierte Abfrage-Sprache“) aufgefasst, obwohl sie laut Standard ein eigenständiger Name ist. Die Bezeichnung leitet sich von dem Vorgänger SEQUEL ([{{IPA|ˈsiːkwəl}}], Structured English Query Language) ab, welche mit Beteiligung von [[Edgar F. Codd]] (IBM) in den 1970er Jahren von [[Donald D. Chamberlin]] und [[Raymond F. Boyce]] entworfen wurde. SEQUEL wurde später in SQL umbenannt, weil SEQUEL ein eingetragenes Warenzeichen der [[Hawker Siddeley]] Aircraft Company ist.&lt;ref&gt;[http://www.mcjones.org/System_R/SQL_Reunion_95/sqlr95-System.html ''Diskussion über System R und zur Namensänderung von SEQUEL zu SQL'']&lt;/ref&gt;<br /> <br /> == Sprachelemente und Beispiele ==<br /> [[Datei:SQL.png|mini|Bestandteile von SQL]]<br /> <br /> SQL-Befehle lassen sich in vier Kategorien unterteilen (Zuordnung nach der Theorie der [[Datenbanksprache]]n in Klammern):<br /> <br /> * [[Data Query Language]] (DQL) Befehle zur Abfrage und Aufbereitung der gesuchten Informationen, wird auch als Untermenge der DML klassifiziert<br /> * [[Data Manipulation Language]] (DML) Befehle zur [[Datenmanipulation]] (Ändern, Einfügen, Löschen von [[Datensatz|Datensätzen]]) und lesendem Zugriff<br /> * [[Data Definition Language]] (DDL) Befehle zur [[Datendefinition|Definition]] des [[Datenbankschema]]s (Erzeugen, Ändern, Löschen von [[Datenbanktabelle]]n, Definition von [[Primärschlüssel]]n und [[Fremdschlüssel]]n)<br /> * [[Data Control Language]] (DCL) Befehle für die [[Mehrbenutzersystem#Rechtemanagement|Rechteverwaltung]]<br /> * [[Transaction Control Language]] (TCL) Befehle für die [[Transaktion (Informatik)|Transaktionskontrolle]]<br /> <br /> Die Bezeichnung SQL bezieht sich auf das englische Wort {{&quot;|Text=query|Übersetzung=[[Abfragesprache|Abfrage]]|lang=en}}. Mit Abfragen werden die in einer Datenbank gespeicherten Daten abgerufen, also dem Benutzer oder einer Anwendersoftware zur Verfügung gestellt.<br /> <br /> Das Ergebnis einer Abfrage sieht wiederum aus wie eine Tabelle und kann oft auch wie eine Tabelle angezeigt, bearbeitet und weiterverwendet werden. {{Siehe auch|Datenbanktabelle}}<br /> <br /> Die grundlegenden Befehle und Begriffe werden anhand des folgenden Beispiels erklärt:<br /> <br /> {|<br /> |- style=&quot;border-bottom: 1px solid #EEE;&quot;<br /> ! [[Entity-Relationship-Modell#ER-Diagramme|ER-Diagramm]]:<br /> |colspan=&quot;4&quot;| [[Datei:SQL-Beispiel.svg|700px|SQL-Beispiel]]<br /> |-<br /> ! Relationen:<br /> |<br /> {| class=&quot;wikitable&quot;<br /> |+ Student<br /> |&lt;u&gt;MatrNr&lt;/u&gt; || Name<br /> |-<br /> | 26120 || Fichte<br /> |-<br /> | 25403 || Jonas<br /> |-<br /> | 27103 || Fauler<br /> |}<br /> |<br /> {| class=&quot;wikitable&quot;<br /> |+ hört<br /> | &lt;u&gt;MatrNr&lt;/u&gt; ||&lt;u&gt;VorlNr&lt;/u&gt;<br /> |-<br /> | 25403 || 5001<br /> |-<br /> | 26120 || 5001<br /> |-<br /> | 26120 || 5045<br /> |}<br /> |<br /> {| class=&quot;wikitable&quot;<br /> |+ Vorlesung<br /> |&lt;u&gt;VorlNr&lt;/u&gt; || Titel || PersNr<br /> |-<br /> | 5001 || ET|| 15<br /> |-<br /> | 5022 || IT|| 12<br /> |-<br /> | 5045 || DB|| 12<br /> |}<br /> |<br /> {| class=&quot;wikitable&quot;<br /> |+ Professor<br /> |&lt;u&gt;PersNr&lt;/u&gt; || Name<br /> |-<br /> | 12 || Wirth<br /> |-<br /> | 15 || Tesla<br /> |-<br /> | 20 || Urlauber<br /> |}<br /> |}<br /> <br /> === Einfache Abfrage ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT *<br /> FROM Student;<br /> &lt;/syntaxhighlight&gt;<br /> listet alle Spalten und alle Zeilen der Tabelle ''Student'' auf.<br /> <br /> Ergebnis:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! MatrNr !! Name<br /> |-<br /> | 26120 || Fichte<br /> |-<br /> | 25403 || Jonas<br /> |-<br /> | 27103 || Fauler<br /> |}<br /> <br /> === Abfrage mit Spaltenauswahl ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT VorlNr, Titel<br /> FROM Vorlesung;<br /> &lt;/syntaxhighlight&gt;<br /> listet die Spalten ''VorlNr'' und ''Titel'' aller Zeilen der Tabelle ''Vorlesung'' auf.<br /> <br /> Ergebnis:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! VorlNr !! Titel<br /> |-<br /> | 5001 || ET<br /> |-<br /> | 5022 || IT<br /> |-<br /> | 5045 || DB<br /> |}<br /> <br /> === Abfrage mit eindeutigen Werten ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT DISTINCT MatrNr<br /> FROM hört;<br /> &lt;/syntaxhighlight&gt;<br /> listet nur unterschiedliche Einträge der Spalte ''MatrNr'' aus der Tabelle ''hört'' auf. Dies zeigt die Matrikelnummern aller Studenten, die mindestens eine Vorlesung hören, wobei mehrfach auftretende Matrikelnummern nur einmal ausgegeben werden.<br /> <br /> Ergebnis:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! MatrNr<br /> |-<br /> | 25403<br /> |-<br /> | 26120<br /> |}<br /> <br /> === Abfrage mit Umbenennung ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT MatrNr AS Matrikelnummer, Name<br /> FROM Student;<br /> &lt;/syntaxhighlight&gt;<br /> listet die Spalten ''MatrNr'' und Name aller Zeilen der Tabelle ''Student'' auf. ''MatrNr'' wird beim Anzeigeergebnis als Matrikelnummer aufgeführt.<br /> <br /> Ergebnis:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! Matrikelnummer !! Name<br /> |-<br /> | 26120 || Fichte<br /> |-<br /> | 25403 || Jonas<br /> |-<br /> | 27103 || Fauler<br /> |}<br /> <br /> === Abfrage mit Filter ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT VorlNr, Titel<br /> FROM Vorlesung<br /> WHERE Titel = 'ET';<br /> &lt;/syntaxhighlight&gt;<br /> listet ''VorlNr'' und ''Titel'' aller derjenigen Zeilen der Tabelle ''Vorlesung'' auf, deren Titel 'ET' ist.<br /> <br /> Die solchermaßen strukturierte, häufig verwendete Anweisung wird nach den Anfangsbuchstaben auch als „SFW-Block“ bezeichnet.<br /> <br /> Ergebnis:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! VorlNr !! Titel<br /> |-<br /> | 5001 || ET<br /> |}<br /> <br /> === Abfrage mit Filter nach Inhalt ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Name<br /> FROM Student<br /> WHERE Name LIKE 'F%';<br /> &lt;/syntaxhighlight&gt;<br /> listet die Namen aller Studenten auf, deren Name mit ''F'' beginnt (im Beispiel: Fichte und Fauler).<br /> <br /> ''LIKE'' kann mit verschiedenen [[Wildcard (Informatik)|Platzhaltern]] verwendet werden: ''_'' steht für ein einzelnes beliebiges Zeichen, ''%'' steht für eine beliebige Zeichenfolge. Manche Datenbanksysteme bieten weitere solche ''Wildcard''-Zeichen an, etwa für Zeichenmengen.<br /> <br /> Ergebnis:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! Name<br /> |-<br /> | Fichte<br /> |-<br /> | Fauler<br /> |}<br /> <br /> === Abfrage mit Filter und Sortierung ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Vorname, Name, StrasseNr, Plz, Ort<br /> FROM Student<br /> WHERE Plz = '20095'<br /> ORDER BY Name;<br /> &lt;/syntaxhighlight&gt;<br /> listet ''Vorname'', ''Name'', ''StrasseNr'', ''Plz'' und ''Ort'' aller Studenten aus dem angegebenen Postleitzahlbereich sortiert nach ''Name'' auf.<br /> <br /> === Abfrage mit verknüpften Tabellen ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name<br /> FROM Professor, Vorlesung<br /> WHERE Professor.PersNr = Vorlesung.PersNr;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Die Aufzählung hinter [[From (SQL)|FROM]] legt die Datenquellen fest: an dieser Stelle können mit Hilfe sogenannter [[Join (SQL)|JOINs]] mehrere Tabellen miteinander verknüpft werden, so dass Daten aus verschiedenen Tabellen zusammengeführt und angezeigt werden.<br /> <br /> In diesem Beispiel wird ein ''innerer natürlicher Verbund'' (''natural inner join'') verwendet: Alle Datensätze aus den Tabellen ''Professor'' und ''Vorlesung'', die den gleichen Wert im Feld ''PersNr'' haben. Professoren ohne Vorlesung und Vorlesungen ohne Professor werden damit nicht angezeigt.<br /> <br /> Dies ist äquivalent zu:<br /> <br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name<br /> FROM Professor<br /> INNER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> ''Vorsicht: Nicht alle Implementierungen verstehen beide Schreibweisen, die &quot;Oracle&quot; Schreibweise „FROM Professor, Vorlesung“ gilt als veraltet und ist weniger verbreitet. Sie entspricht auch nicht dem ANSI Standard und sollte deshalb vermieden werden. Aus historischen Gründen ist sie jedoch noch häufig anzutreffen.''<br /> <br /> Tabellen können nicht nur über Schlüsselfelder, sondern über beliebige Felder miteinander verknüpft werden, wie das folgende, fachlich unsinnige Beispiel zeigt:<br /> <br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Vorlesung.Titel, Professor.Name<br /> FROM Professor, Vorlesung<br /> WHERE Professor.Name &lt;&gt; Vorlesung.Titel<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Das Ergebnis erhält die Kombinationen ''aller'' Professoren und ''aller'' Vorlesungen, wo der Name des Professors vom Titel der Vorlesung ''abweicht'' – das sind einfach alle (keine Vorlesung heißt wie ein Professor):<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! Titel !! Name<br /> |-<br /> | ET || Tesla<br /> |-<br /> | ET || Wirth<br /> |-<br /> | ET || Urlauber<br /> |-<br /> | IT || Tesla<br /> |-<br /> | IT || Wirth<br /> |-<br /> | IT || Urlauber<br /> |-<br /> | DB || Tesla<br /> |-<br /> | DB || Wirth<br /> |-<br /> | DB || Urlauber<br /> |}<br /> <br /> === Linker äußerer Verbund ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Professor.PersNr, Professor.Name, Vorlesung.VorlNr, Vorlesung.Titel<br /> FROM Professor<br /> LEFT OUTER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr;<br /> &lt;/syntaxhighlight&gt;<br /> ergibt alle Datensätze der Tabelle ''Professor'' verbunden mit den Datensätzen der Tabelle ''Vorlesung'', die den jeweils gleichen Wert im Feld ''PersNr'' haben. Professoren ohne Vorlesung sind enthalten, die Vorlesungsspalten im Ergebnis haben dann den Wert NULL. Vorlesungen ohne Professor sind nicht enthalten.<br /> <br /> Die folgende Abfrage liefert nur diejenigen Datensätze, zu denen kein passender Datensatz im linken äußeren Verbund existiert (alle Professoren, die keine Vorlesungen halten):<br /> <br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Professor.PersNr, Professor.Name<br /> FROM Professor<br /> LEFT OUTER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr<br /> WHERE Vorlesung.PersNr IS NULL;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Das Gleiche kann mittels einer Unterabfrage erreicht werden:<br /> <br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Professor.PersNr, Professor.Name<br /> FROM Professor<br /> WHERE NOT EXISTS (SELECT * FROM Vorlesung WHERE PersNr = Professor.PersNr);<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Gruppierung mit Aggregat-Funktionen ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Professor.PersNr, Professor.Name, COUNT(Vorlesung.PersNr) AS Anzahl<br /> FROM Professor<br /> LEFT OUTER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr<br /> GROUP BY Professor.Name, Professor.PersNr;<br /> &lt;/syntaxhighlight&gt;<br /> zählt die Anzahl der Vorlesungen pro Professor mit Hilfe der [[Aggregation (Informatik)|Aggregat]]-Funktion ''COUNT''.<br /> <br /> ''Bemerkung'': ''COUNT(Professor.PersNr)'' oder ''COUNT(*)'' wären falsch ([[Nullwert]]e sollen nicht mitgezählt werden).<br /> <br /> === Zusammenfassung eines SELECT ===<br /> Zusammengefasst kann man wichtigsten Elemente einer SQL-SELECT-Abfrage etwa so beschreiben:<br /> <br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT [DISTINCT] Auswahlliste [AS Spaltenalias]<br /> FROM Quelle [ [AS] Tabellenalias], evtl. mit JOIN-Verknüpfungen<br /> [WHERE Where-Klausel]<br /> [GROUP BY ein oder mehrere Group-by-Attribute]<br /> [HAVING Having-Klausel]<br /> [ORDER BY ein oder mehrere Sortierungsattribute mit [ASC|DESC]];<br /> &lt;/syntaxhighlight&gt;<br /> Erläuterung:<br /> <br /> * DISTINCT gibt an, dass aus der Ergebnisrelation gleiche [[Tupel (Informatik)|Ergebnistupel]] entfernt werden sollen. Es wird also jeder Datensatz nur einmal ausgegeben, auch wenn er mehrfach in der Tabelle vorkommt. Sonst liefert SQL eine [[Multimenge]] zurück.<br /> * ''Auswahlliste'' bestimmt, welche Spalten der ''Quelle'' auszugeben sind (* für alle) und ob [[Aggregatfunktion]]en anzuwenden sind. Wie bei allen anderen Aufzählungen werden die einzelnen Elemente mit Komma voneinander getrennt.<br /> * ''Quelle'' gibt an, wo die Daten herkommen. Es können [[Relation (Datenbank)|Relationen]] und [[Sicht (Datenbank)|Sichten]] angegeben werden und miteinander als [[kartesisches Produkt]] oder als Verbund ([[Relationale Algebra#Join|JOIN]], ab SQL-92) verknüpft werden. Mit der zusätzlichen Angabe eines Namens können Relationen für die Abfrage umbenannt werden (vgl. [[#Sprachelemente und Beispiele|Beispiele]]).<br /> * ''Where-Klausel'' bestimmt Bedingungen, auch Filter genannt, unter denen die Daten ausgegeben werden sollen. In SQL ist hier auch die Angabe von Unterabfragen möglich, so dass SQL ''streng relational vollständig'' wird.<br /> * ''Group-by-Attribut'' legt fest, ob unterschiedliche Werte als einzelne Zeilen ausgegeben werden sollen (''GROUP BY'' = Gruppierung) oder aber die Feldwerte der Zeilen durch Aggregationen wie Addition (''SUM''), Durchschnitt (''AVG''), Minimum (''MIN''), Maximum (''MAX'') zu einem Ergebniswert zusammengefasst werden, der sich auf die Gruppierung bezieht.<br /> * ''Having-Klausel'' ist wie die Where-Klausel, nur dass sich die angegebene Bedingung auf das Ergebnis einer Aggregationsfunktion bezieht, zum Beispiel HAVING SUM (Betrag) &gt; 0.<br /> * ''Sortierungsattribut'': nach ORDER BY werden Attribute angegeben, nach denen sortiert werden soll. Die Standardvoreinstellung ist ASC, das bedeutet aufsteigende Sortierung, DESC ist absteigende Sortierung.<br /> <br /> ''Mengenoperatoren'' können auf mehrere SELECT-Abfragen angewandt werden, die gleich viele Attribute haben und bei denen die Datentypen der Attribute übereinstimmen:<br /> <br /> * ''UNION'' vereinigt die Ergebnismengen. In einigen Implementierungen werden mehrfach vorkommende Ergebnistupel wie bei DISTINCT entfernt, ohne dass „UNION DISTINCT“ geschrieben werden muss bzw. darf.<br /> * ''UNION ALL'' vereinigt die Ergebnismengen. Mehrfach vorkommende Ergebnistupel bleiben erhalten. Einige Implementierungen interpretieren aber „UNION“ wie „UNION ALL“ und verstehen das „ALL“ möglicherweise nicht und geben eine Fehlermeldung aus.<br /> * ''EXCEPT'' liefert die Tupel, die in einer ersten, jedoch nicht in einer zweiten Ergebnismenge enthalten sind. Mehrfach vorkommende Ergebnistupel werden entfernt.<br /> * ''MINUS'' ist ein analoger Operator wie ''EXCEPT'', der von manchen SQL-Dialekten alternativ benutzt wird.<br /> * ''INTERSECT'' liefert die Schnittmenge zweier Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden entfernt.<br /> <br /> === Einfügen von Datensätzen ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> INSERT INTO Vorlesung (VorlNr, Titel, PersNr) VALUES (1000, 'Softwareentwicklung 1', 12);<br /> INSERT INTO Vorlesung (VorlNr, Titel, PersNr) VALUES (1600, 'Algorithmen', 12);<br /> INSERT INTO Vorlesung (VorlNr, Titel, PersNr) VALUES (1200, 'Netzwerke 1', 20);<br /> INSERT INTO Vorlesung (VorlNr, Titel, PersNr) VALUES (1001, 'Datenbanken', 15);<br /> &lt;/syntaxhighlight&gt;<br /> fügt vier Datensätze in die Tabelle ''Vorlesung'' ein. Die Werte müssen mit den Datentypen der Felder ''VorlNr, Titel, PersNr'' zusammenpassen.<br /> <br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT *<br /> FROM Vorlesung;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> liefert dann z.&amp;nbsp;B. das Ergebnis (die Reihenfolge kann auch anders sein):<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! VorlNr !! Titel<br /> !PersNr<br /> |-<br /> |1001<br /> |Datenbanken<br /> |15<br /> |-<br /> |1000<br /> |Softwareentwicklung 1<br /> |12<br /> |-<br /> |1200<br /> |Netzwerke 1<br /> |20<br /> |-<br /> | 5001 || ET<br /> |12<br /> |-<br /> | 5022 || IT<br /> |12<br /> |-<br /> |1600<br /> |Algorithmen<br /> |12<br /> |-<br /> | 5045 || DB<br /> |15<br /> |}<br /> <br /> === Ändern von Datensätzen ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> UPDATE Vorlesung<br /> SET VorlNr = VorlNr + 1000, PersNr = 20<br /> WHERE PersNr = 15;<br /> &lt;/syntaxhighlight&gt;<br /> ändert alle Datensätze, für die ''PersNr'' den Wert 15 hat. Der Wert von VorlNr wird um 1000 erhöht und der Wert von ''PersNr'' auf 20 gesetzt.<br /> <br /> Ergebnis eines nachfolgenden SELECT * ist, evtl. mit anderer Reihenfolge:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! VorlNr !! Titel<br /> !PersNr<br /> |-<br /> |1000<br /> |Softwareentwicklung 1<br /> |12<br /> |-<br /> |1200<br /> |Netzwerke 1<br /> |20<br /> |-<br /> |1600<br /> |Algorithmen<br /> |12<br /> |-<br /> |2001<br /> |Datenbanken<br /> |20<br /> |-<br /> | 5001 || ET<br /> |12<br /> |-<br /> | 5022 || IT<br /> |12<br /> |-<br /> | 6045 || DB<br /> |20<br /> |}<br /> <br /> === Löschen von Datensätzen ===<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> DELETE FROM Vorlesung<br /> WHERE PersNr = 12;<br /> &lt;/syntaxhighlight&gt;<br /> löscht alle Datensätze, für die ''PersNr'' den Wert 12 hat.<br /> <br /> Ergebnis eines nachfolgenden SELECT *, evtl. in anderer Reihenfolge:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! VorlNr !! Titel<br /> !PersNr<br /> |-<br /> |1200<br /> |Netzwerke 1<br /> |20<br /> |-<br /> |2001<br /> |Datenbanken<br /> |20<br /> |-<br /> | 6045 || DB<br /> |20<br /> |}<br /> <br /> === Zusammenfassung von INSERT, UPDATE, DELETE ===<br /> Verallgemeinert sehen die Änderungsanweisungen so aus:<br /> <br /> INSERT-Anweisung:<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> INSERT INTO Quelle [(Auswahlliste)]<br /> VALUES (Werteliste) | SELECT &lt;Auswahlkriterien&gt;;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> UPDATE-Anweisung:<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> UPDATE Quelle SET Zuweisungsliste<br /> [FROM From-Klausel]<br /> [WHERE Auswahlbedingung];<br /> &lt;/syntaxhighlight&gt;<br /> <br /> DELETE-Anweisung:<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> DELETE FROM Quelle<br /> [WHERE Auswahlbedingung];<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Datendefinition ==<br /> <br /> === Datenbanktabelle ===<br /> Die [[Datenbanktabelle]] ''Vorlesung'' kann mit der folgenden [[Anweisung (Programmierung)|Anweisung]] erzeugt werden:&lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> CREATE TABLE Vorlesung (VorlNr INT NOT NULL PRIMARY KEY, Titel VARCHAR NOT NULL, PersNr NOT NULL, FOREIGN KEY (PersNr) REFERENCES Professor (PersNr));<br /> &lt;/syntaxhighlight&gt;In keinem der Felder ''VorlNr'', ''Titel'', ''PersNr'' ist der Wert &lt;code&gt;NULL&lt;/code&gt; erlaubt. Der [[Fremdschlüssel]] ''PersNr'' [[Referenz (Programmierung)|referenziert]] den [[Primärschlüssel]] ''PersNr'' der Tabelle ''Professor''. Damit wird sichergestellt, dass in die Tabelle ''Vorlesung'' nur [[Datensätze]] eingefügt werden können, für die der Wert von ''PersNr'' in der Tabelle ''Professor'' als Primärschlüssel vorkommt (siehe [[SQL#Referenzielle Integrität|referenzielle Integrität]]).<br /> <br /> === Datenbankindex ===<br /> Mit der [[Anweisung (Programmierung)|Anweisung]]&lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> CREATE INDEX VorlesungIndex<br /> ON Vorlesung (PersNr, Titel);<br /> &lt;/syntaxhighlight&gt;kann ein [[Datenbankindex]] für die Tabelle ''Vorlesung'' definiert werden, der vom Datenbanksystem bei der Ausführung von Abfragen zur Beschleunigung verwendet werden kann. Ob das sinnvoll ist, entscheidet das Datenbanksystem eigenständig durch komplexe Auswertungen und Analysen für jede Abfrage erneut.<br /> <br /> === Sicht ===<br /> Eine [[Sicht (Datenbank)|Sicht]] ist im Wesentlichen ein Alias für eine [[Datenbankabfrage]]. Sie kann wie eine [[Datenbanktabelle]] verwendet werden. Die [[Anweisung (Programmierung)|Anweisung]]&lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> CREATE VIEW Vorlesungssicht AS<br /> SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name<br /> FROM Professor<br /> INNER JOIN Vorlesung ON Professor.PersNr = Vorlesung.PersNr;<br /> &lt;/syntaxhighlight&gt;speichert die definierte Abfrage als Sicht. Die Abfrage&lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> SELECT Titel, Name<br /> FROM Vorlesungssicht<br /> WHERE VorlNr &lt; 5000;<br /> &lt;/syntaxhighlight&gt;verwendet diese [[Sicht (Datenbank)|Sicht]] und könnte zum Beispiel folgendes Ergebnis liefern:<br /> {| class=&quot;wikitable&quot;<br /> |-<br /> ! Titel<br /> !PersNr<br /> |-<br /> |Softwareentwicklung 1<br /> |Wirth<br /> |-<br /> |Netzwerke 1<br /> |Urlauber<br /> |-<br /> |Algorithmen<br /> |Wirth<br /> |-<br /> |Datenbanken<br /> |Urlauber<br /> |}<br /> <br /> === Zusammenfassung ===<br /> Zusammengefasst sind die wichtigsten Elemente der Definition einer [[Datenbanktabelle]], eines [[Datenbankindex]] oder einer [[Sicht (Datenbank)|Sicht]] wie folgt anzugeben:<br /> &lt;syntaxhighlight lang=&quot;sql&quot;&gt;<br /> CREATE TABLE Tabellenname (Attributdefinition [PRIMARY KEY]) [, FOREIGN KEY (Attributliste) REFERENCES Tabellenname (Attributliste)]);<br /> DROP TABLE Tabellenname;<br /> ALTER TABLE Tabellenname (Attributdefinition [PRIMARY KEY]) [, FOREIGN KEY (Attributliste) REFERENCES Tabellenname (Attributliste)]);<br /> <br /> CREATE INDEX Indexname ON Tabellenname (Attributliste);<br /> DROP INDEX Indexname;<br /> <br /> CREATE VIEW Sichtname [(Attributliste)] AS SELECT &lt;Auswahlkriterien&gt;;<br /> DROP VIEW Sichtname;<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Redundanz ==<br /> {{Hauptartikel|Normalisierung (Datenbank)}}<br /> <br /> Ein [[Grundsatz]] des [[Datenbankdesign]]s ist, dass in einer Datenbank keine [[Redundanz (Informationstheorie)|Redundanzen]] auftreten sollen. Dies bedeutet, dass jede Information, also z.&amp;nbsp;B. eine Adresse, nur genau einmal gespeichert wird.<br /> <br /> :''Beispiel'': in der Teilnehmerliste einer Vorlesung werden die Adressen nicht erneut erfasst, sondern nur indirekt über die Matrikelnummer. Um dennoch eine Teilnehmerliste mit Adressen zu erstellen, erfolgt eine SELECT-Abfrage, in der die Teilnehmertabelle mit der Studententabelle verknüpft wird (siehe oben: JOIN).<br /> <br /> In manchen Fällen ist die [[Rechenleistung|Performance]] einer Datenbank besser, wenn sie nicht (vollständig) normalisiert wird. In diesem Falle werden in der Praxis oft Redundanzen bewusst in Kauf genommen, um zeitaufwändige und komplexe [[Relationale Algebra#Join|Joins]] zu verkürzen und so die Geschwindigkeit der Abfragen zu erhöhen. Man spricht auch von einer Denormalisierung einer Datenbank. Wann (und ob überhaupt) eine Denormalisierung sinnvoll ist, ist umstritten und hängt von den Umständen ab.<br /> <br /> == Schlüssel ==<br /> {{Hauptartikel|Schlüssel (Datenbank)}}<br /> <br /> Während die Informationen auf viele Tabellen verteilt werden müssen, um Redundanzen zu vermeiden, sind Schlüssel das Mittel, um diese verstreuten Informationen miteinander zu verknüpfen.<br /> <br /> So hat in der Regel jeder Datensatz eine eindeutige Nummer oder ein anderes eindeutiges Feld, um ihn zu identifizieren. Diese Identifikationen werden als Schlüssel bezeichnet.<br /> <br /> Wenn dieser Datensatz in anderen Zusammenhängen benötigt wird, wird lediglich sein Schlüssel angegeben. So werden bei der Erfassung von Vorlesungsteilnehmern nicht deren Namen und Adressen, sondern nur deren jeweilige Matrikelnummer erfasst, aus der sich alle weiteren Personalien ergeben.<br /> <br /> So kann es sein, dass manche Datensätze nur aus Schlüsseln (meist Zahlen) bestehen, die erst in Verbindung mit Verknüpfungen verständlich werden. Der eigene Schlüssel des Datensatzes wird dabei als Primärschlüssel bezeichnet. Andere Schlüssel im Datensatz, die auf die Primärschlüssel anderer Tabellen verweisen, werden als Fremdschlüssel bezeichnet.<br /> <br /> Schlüssel können auch aus einer Kombination mehrerer Angaben bestehen. Z.&amp;nbsp;B. können die Teilnehmer einer Vorlesung durch die eindeutige Kombination von Vorlesungsnummer und Studentennummer identifiziert werden, so dass die doppelte Anmeldung eines Studenten zu einer Vorlesung ausgeschlossen ist.<br /> <br /> == Referenzielle Integrität ==<br /> {{Hauptartikel|Referentielle Integrität}}<br /> <br /> Referenzielle Integrität bedeutet, dass Datensätze, die von anderen Datensätzen verwendet werden, in der Datenbank auch vollständig vorhanden sind.<br /> <br /> :Im obigen Beispiel bedeutet dies, dass in der Teilnehmertabelle nur Matrikel-Nummern gespeichert sind, die es in der Studenten-Tabelle auch tatsächlich gibt.<br /> <br /> Diese wichtige Funktionalität kann (und sollte) bereits von der Datenbank überwacht werden, so dass z.&amp;nbsp;B.<br /> * nur vorhandene Matrikelnummern in die Teilnehmertabelle eingetragen werden können,<br /> * der Versuch, den Datensatz eines Studenten, der schon eine Vorlesung belegt hat, zu ''löschen'', entweder verhindert wird (Fehlermeldung) oder der Datensatz auch gleich aus der Teilnehmertabelle entfernt wird (Löschweitergabe) und<br /> * der Versuch, die Matrikelnummer eines Studenten, der schon eine Vorlesung belegt hat, zu ''ändern'', entweder verhindert wird (Fehlermeldung) oder der Eintrag in der Teilnehmertabelle gleich mitgeändert wird (Aktualisierungsweitergabe).<br /> <br /> Widersprüchlichkeit von Daten wird allgemein als [[Konsistenz (Datenspeicherung)#Konsistenz in klassischen relationalen Datenbanken|Dateninkonsistenz]] bezeichnet. Diese besteht, wenn Daten bspw. die [[Integritätsbedingung]]en (z.&amp;nbsp;B. [[Constraint]]s oder [[Schlüssel (Datenbank)#Fremdschlüssel|Fremdschlüsselbeziehungen]]) nicht erfüllen.<br /> <br /> Ursachen für Dateninkonsistenzen können Fehler bei der Analyse des Datenmodells, fehlende [[Normalisierung (Datenbank)|Normalisierung]] des [[Entity-Relationship-Modell|ERM]] oder Fehler in der Programmierung sein.<br /> <br /> Zum letzteren gehören die ''[[Verlorene Updates|Lost-Update]]''-Phänomene sowie die Verarbeitung von zwischenzeitlich veralteten Zwischenergebnissen. Dies tritt vor allem bei der Online-Verarbeitung auf, da dem Nutzer angezeigte Werte nicht in einer Transaktion gekapselt werden können.<br /> <br /> Beispiel:<br /> Transaktion ''A'' liest Wert ''x''<br /> Transaktion ''B'' verringert Wert ''x'' um 10<br /> Transaktion ''A'' erhöht den gespeicherten Wert von ''x'' um eins und schreibt zurück<br /> Ergebnis x' = x+1<br /> Die Änderung von ''B'' ist verloren gegangen<br /> <br /> == SQL-Datentypen ==<br /> {{Hauptartikel|Datentypen}}<br /> <br /> In den oben vorgestellten Befehlen<br /> &lt;code&gt;create table&lt;/code&gt; und &lt;code&gt;alter<br /> table&lt;/code&gt; wird bei der Definition jeder Spalte angegeben,<br /> welchen [[Datentyp]] die Werte dieser Spalte annehmen können. Dazu<br /> liefert SQL eine ganze Reihe standardisierter Datentypen mit. Die<br /> einzelnen DBMS-Hersteller haben diese Liste jedoch um eine Unzahl<br /> weiterer Datentypen erweitert. Die wichtigsten Standarddatentypen sind:<br /> <br /> ;&lt;code&gt;integer&lt;/code&gt;<br /> : [[Ganze Zahl]] (positiv oder negativ), wobei je nach Zahl der verwendeten Bits Bezeichnungen wie ''smallint'', ''tinyint'' oder ''bigint'' verwendet werden. Die jeweiligen Grenzen und die verwendete Terminologie sind vom Datenbanksystem definiert.<br /> ;&lt;code&gt;numeric (n, m)&lt;/code&gt; oder &lt;code&gt;decimal (n, m)&lt;/code&gt;<br /> :[[Festkommazahl]] (positiv oder negativ) mit insgesamt maximal &lt;code&gt;n&lt;/code&gt; Stellen, davon &lt;code&gt;m&lt;/code&gt; Nachkommastellen. Wegen der hier erfolgenden Speicherung als Dezimalzahl ist eine besonders für Geldbeträge notwendige Genauigkeit gegeben.<br /> ;&lt;code&gt;float (m)&lt;/code&gt;<br /> : [[Gleitkommazahl]] (positiv oder negativ) mit maximal &lt;code&gt;m&lt;/code&gt; Nachkommastellen.<br /> ;&lt;code&gt;real&lt;/code&gt;<br /> : [[Gleitkommazahl]] (positiv oder negativ). Die Genauigkeit für diesen Datentyp ist jeweils vom Datenbanksystem definiert.<br /> ;&lt;code&gt;double&lt;/code&gt; oder &lt;code&gt;double precision&lt;/code&gt;<br /> : [[Gleitkommazahl]] (positiv oder negativ). Die Genauigkeit für diesen Datentyp ist jeweils vom Datenbanksystem definiert.<br /> ;&lt;code&gt;float&lt;/code&gt; und &lt;code&gt;double&lt;/code&gt;<br /> : sind für technisch-wissenschaftliche Werte geeignet und umfassen auch die Exponentialdarstellung. Wegen der Speicherung im Binärformat sind sie aber für Geldbeträge nicht geeignet, weil sich beispielsweise der Wert 0,10&amp;nbsp;€ (entspricht 10 Cent) nicht exakt abbilden lässt.<br /> ;&lt;code&gt;character (n)&lt;/code&gt; oder &lt;code&gt;char (n)&lt;/code&gt;<br /> : [[Zeichenkette]] Text mit &lt;code&gt;n&lt;/code&gt; Zeichen.<br /> ;&lt;code&gt;varchar (n)&lt;/code&gt; oder &lt;code&gt;character varying (n)&lt;/code&gt;<br /> : Zeichenkette (also Text) von variabler Länge, aber maximal &lt;code&gt;n&lt;/code&gt; druckbaren und/oder nicht druckbaren Zeichen. Die Variante &lt;code&gt;varchar2&lt;/code&gt; ist für [[Oracle (Datenbanksystem)|Oracle]] spezifisch, ohne dass sie sich tatsächlich unterscheidet.<br /> ;&lt;code&gt;text&lt;/code&gt;<br /> : Zeichenkette (zumindest theoretisch) beliebiger Länge. In manchen Systemen synonym zu &lt;code&gt;clob&lt;/code&gt;.<br /> ; &lt;code&gt;date&lt;/code&gt;<br /> : Datum (ohne Zeitangabe)<br /> ;&lt;code&gt;time&lt;/code&gt;<br /> : Zeitangabe (evtl. inklusive Zeitzone)<br /> ;&lt;code&gt;timestamp&lt;/code&gt;<br /> : Zeitstempel (umfasst Datum und Uhrzeit; evtl. inklusive Zeitzone), meistens mit Millisekundenauflösung, teilweise auch mikrosekundengenau<br /> ; &lt;code&gt;boolean&lt;/code&gt;<br /> : [[Boolesche Variable]] (kann die Werte &lt;code&gt;true&lt;/code&gt;(wahr) oder &lt;code&gt;false&lt;/code&gt; (falsch) oder &lt;code&gt;NULL&lt;/code&gt; (unbekannt) annehmen). Dieser Datentyp ist laut SQL:2003 optional und nicht alle DBMS stellen diesen Datentyp bereit.<br /> ;&lt;code&gt;[[Binary Large Object|blob]] (n)&lt;/code&gt; oder &lt;code&gt;binary large object (n)&lt;/code&gt;<br /> : Binärdaten von maximal &lt;code&gt;n&lt;/code&gt; [[Byte]]s Länge.<br /> ;&lt;code&gt;[[Character Large Object|clob]] (n)&lt;/code&gt; oder &lt;code&gt;character large object (n)&lt;/code&gt;<br /> : Zeichenketten mit maximal &lt;code&gt;n&lt;/code&gt; Zeichen Länge.<br /> <br /> Wenn es die Tabellendefinition erlaubt, können Attribute auch den Wert<br /> &lt;code&gt;NULL&lt;/code&gt; annehmen, wenn kein Wert bekannt ist oder aus anderen Gründen kein Wert gespeichert werden soll. Der<br /> &lt;code&gt;NULL&lt;/code&gt;-Wert ist von allen anderen möglichen Werten des Datentyps verschieden.<br /> <br /> == Transaktion, Commit und Rollback ==<br /> {{Hauptartikel|Transaktion (Informatik)}}<br /> <br /> Eine Transaktion bezeichnet eine Menge von Datenbankänderungen, die zusammen ausgeführt werden (müssen). So ist beispielsweise die Buchung (als Transaktion) eines Geldbetrags durch zwei atomare Datenbankoperationen „Abbuchen des Geldbetrages von Konto A“ und „Buchung des Geldbetrages auf Konto B“ gekennzeichnet. Kann die vollständige Abarbeitung der elementaren Datenbankoperationen der Transaktion nicht durchgeführt werden (z.&amp;nbsp;B. aufgrund eines Fehlers), müssen alle durchgeführten Änderungen an dem Datenbestand auf den Ausgangszustand zurückgesetzt werden.<br /> <br /> Der Vorgang, der alle Änderungen einer Transaktion zurücksetzt, wird als Rollback bezeichnet. Der Begriff Commit bezeichnet das Ausführen einer Transaktion. Transaktionen sind eine Möglichkeit, die Konsistenz des Datenbestandes zu sichern. Im Beispiel der doppelten Kontenführung wird durch das Verhindern von ungültigen Teilbuchungen eine ausgeglichene Kontobilanz gewährleistet.<br /> <br /> Datenbanken erlauben es zum Teil, bestimmte Befehle außerhalb einer Transaktion auszuführen. Darunter fällt insbesondere das Laden von Daten in Tabellen oder das Exportieren von Daten mittels Utilities. Manche [[DBMS]] erlauben das temporäre Abschalten der Transaktionslogik sowie einiger Kontrollen zur Erhöhung der Verarbeitungsgeschwindigkeit. Dies muss allerdings meist durch einen expliziten Befehl erzwungen werden, um ein versehentliches Ändern von Daten außerhalb einer Transaktion zu vermeiden. Solche Änderungen können, falls eine Datenbankwiederherstellung erforderlich ist, zu schweren Problemen oder gar Datenverlusten führen.<br /> Eine Transaktion wird mit der SQL-Anweisung &lt;code&gt;[[Commit]]&lt;/code&gt; beendet. Alle Änderungen der Transaktion werden [[Persistenz (Informatik)|persistent]] gemacht, und das DBMS stellt durch geeignete (interne) Mittel (z.&amp;nbsp;B. Logging) sicher, dass diese Änderungen nicht verloren gehen.<br /> <br /> Mit dem Befehl &lt;code&gt;[[Rollback]]&lt;/code&gt; wird eine Transaktion ebenfalls beendet, es werden jedoch alle Änderungen seit Beginn der Transaktion rückgängig gemacht. Das heißt, der Zustand des Systems (in Bezug auf die Änderungen der Transaktion) ist der gleiche wie vor der Transaktion.<br /> <br /> == Programmieren mit SQL ==<br /> === Programmierschnittstelle ===<br /> Das ursprüngliche SQL war keine [[Turing-Vollständigkeit|Turing-vollständige]] [[Programmiersprache]], es ermöglichte also nicht die Realisierung von beliebigen [[Computerprogramm]]en. Mittlerweile lässt es sich mit anderen Programmiersprachen kombinieren, um eine [[Programmierung]] im engeren Sinne zu ermöglichen. Hierfür gibt es unterschiedliche Techniken.<br /> <br /> * Mit [[Embedded SQL]] können SQL-Anweisungen im Quelltext eines Programms, typischerweise in [[C (Programmiersprache)|C]], [[C++]], [[COBOL]], [[Ada (Programmiersprache)|Ada]], [[Pascal (Programmiersprache)|Pascal]] o.&amp;nbsp;Ä. geschrieben, eingebettet werden. Während der Programmvorbereitung übersetzt ein [[Precompiler]] die SQL-Befehle in Funktionsaufrufe. Embedded SQL ist Teil des ANSI-SQL-Standards. Beispiele für Implementierungen: [[SQLJ]] für [[Java (Programmiersprache)|Java]], [[Pro*C]] für [[C (Programmiersprache)|C]], C++, [[ActiveX Data Objects|ADO]] und [[ADO.NET]].<br /> * Herkömmliche ''[[Programmierschnittstelle]]n'' erlauben die direkte Übergabe von SQL-Befehlen an Datenbanksysteme über Funktionsaufrufe. Beispiele: [[ODBC]], [[Java Database Connectivity|JDBC]], [[ActiveX Data Objects|ADO]].<br /> * [[Persistenz (Informatik)|Persistenz]]-[[Framework]]s wie etwa [[Hibernate (Framework)|Hibernate]] oder [[iBATIS]] abstrahieren vom Datenbankzugriff und ermöglichen [[Objektorientierte Programmierung|objektorientierte]] Verarbeitung von relationalen Datenbanken in einer objektorientierten Programmiersprache (z.&amp;nbsp;B. [[Java (Programmiersprache)|Java]] oder [[C-Sharp|C#]])<br /> * Mit dem Teil 4 ''SQL/PSM'' des Standards werden Konstrukte wie IF-Blöcke und Schleifen bereitgestellt. Er wird in den Datenbanksystemen in unterschiedlicher Ausprägung und mit Hersteller-spezifischen Erweiterungen implementiert, z.&amp;nbsp;B. [[PL/SQL]] in [[Oracle (Datenbanksystem)|Oracle]] oder [[Transact-SQL]] im [[Microsoft SQL Server|MS SQL Server]].<br /> <br /> === Statisches und dynamisches SQL ===<br /> Unabhängig von der verwendeten Programmiertechnik wird zwischen ''statischem'' und ''dynamischem'' SQL unterschieden.<br /> <br /> * Bei ''statischem SQL'' ist die SQL-Anweisung dem Datenbanksystem zum Zeitpunkt der Programmübersetzung bekannt und festgelegt (z.&amp;nbsp;B. wenn die Abfrage eines Kontos vorformuliert ist und zur Laufzeit nur die Kontonummer eingesetzt wird).<br /> * Bei ''dynamischem SQL'' ist die SQL-Anweisung dem Datenbanksystem erst zum Zeitpunkt der Programmausführung bekannt (z.&amp;nbsp;B. weil der Benutzer die komplette Abfrage eingibt). So sind z.&amp;nbsp;B. alle SQL-Anweisungen, die mittels [[SQL/CLI]] oder [[JDBC]] ausgeführt werden grundsätzlich dynamisch. Ausgeführt werden dynamische SQL-Anweisungen im Allgemeinen mit execute immediate (''SQL-String'').<br /> <br /> Bei dynamischem SQL ''muss'' das Datenbanksystem die SQL-Anweisung zur Laufzeit des Programms interpretieren und den Zugriffspfad optimieren. Da dieser sogenannte Parse-Vorgang Zeit in Anspruch nimmt, puffern viele Datenbanksysteme die bereits geparsten SQL-Anweisungen, um mehrfaches Parsen gleicher Abfragen zu vermeiden.<br /> Bei statischem SQL ''kann'' schon bei der Übersetzung der Programme bzw. beim Binden der SQL-Anweisungen an eine Datenbank (sogenanntes ''Bind'' der SQL-Befehle) der optimale Zugriffsweg bestimmt werden. Damit sind kürzestmögliche Laufzeiten der Anwendungsprogramme möglich, allerdings muss der Zugriffsweg aller betroffenen Programme neu bestimmt werden, wenn sich Voraussetzungen (z.&amp;nbsp;B. Statistiken) ändern (''Rebind''). Die ''Bind''-Phase ist heute vor allem im [[Großrechner]]-Umfeld bekannt, die meisten Datenbanksysteme optimieren hingegen zur Laufzeit.<br /> <br /> == Chronologie ==<br /> * etwa 1975: ''SEQUEL'' = ''Structured English Query Language'', der Vorläufer von ''SQL'', wird für das Projekt [[System R]] von [[IBM]] entwickelt.<br /> * 1979: ''SQL'' gelangt mit ''Oracle V2'' erstmals durch ''Relational Software Inc.'' auf den Markt.<br /> * 1986: ''SQL1'' wird von [[American National Standards Institute|ANSI]] als Standard verabschiedet.<br /> * 1987: ''SQL1'' wird von der [[Internationale Organisation für Normung|Internationalen Organisation für Normung]] (ISO) als Standard verabschiedet und 1989 nochmals überarbeitet.<br /> * 1992: Der Standard ''SQL2'' oder ''SQL-92'' wird von der ISO verabschiedet.<br /> * 1999: ''SQL3'' oder ''SQL:1999'' wird verabschiedet. Im Rahmen dieser Überarbeitung werden weitere wichtige Features (wie etwa [[Datenbanktrigger|Trigger]] oder rekursive Abfragen) hinzugefügt.<br /> * 2003: ''SQL:2003''. Als neue Features werden aufgenommen [[SQL/XML]], Window functions, Sequences.<br /> * 2006: ''SQL/XML:2006''. Erweiterungen für [[SQL/XML]]&lt;ref name=&quot;SQLXML2006&quot;&gt;{{Literatur |Titel=SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme |Autor=Michael Wagner |Datum=2010 |Verlag=Diplomica Verlag |ISBN=3-8366-9609-6 |Seiten=100}}&lt;/ref&gt;.<br /> * 2008: ''SQL:2008'' bzw. ISO/IEC 9075:2008. Als neue Features werden aufgenommen INSTEAD OF-Trigger, TRUNCATE-Statement und FETCH Klausel.<br /> * 2011: ''SQL:2011'' bzw. ISO/IEC 9075:2011. Als neue Features werden aufgenommen „Zeitbezogene Daten“ (PERIOD FOR). Es gibt Erweiterungen für Window functions und die FETCH Klausel.<br /> * 2016: ''SQL:2016'' bzw. ISO/IEC 9075:2016. Als neue Features werden aufgenommen JSON und „row pattern matching“.<br /> * 2019: ''SQL/MDA:2019''. Erweiterungen für einen Datentyp „mehrdimensionales Feld“.<br /> <br /> == Sprachstandard ==<br /> Ziel der Standardisierung ist es, [[Anwendungsprogramm]]e so erstellen zu können, dass sie vom verwendeten Datenbanksystem unabhängig sind. Heutige Datenbanksysteme [[Implementierung|implementieren]] mehr oder weniger große Teile des Sprachstandards. Darüber hinaus stellen sie oftmals herstellerspezifische Erweiterungen bereit, die nicht dem Standard-Sprachumfang entsprechen. In der Vor-SQL-Zeit strebte man die Portabilität von Anwendungen über die [[Kompatible Schnittstellen|kompatible Schnittstelle]] an.<br /> <br /> Der Standard besteht insgesamt aus zehn einzelnen Publikationen:&lt;ref&gt;{{Internetquelle |url=https://www.iso.org/committee/45342/x/catalogue/p/1/u/0/w/0/d/0 |hrsg=International Organization for Standardization |titel=ISO/IEC 9075 und 13249 |sprache=en |zugriff=2018-09-20}}&lt;/ref&gt;<br /> * ISO/IEC 9075-1:2016 Part 1: Framework (SQL/Framework)<br /> * ISO/IEC 9075-2:2016 Part 2: Foundation (SQL/Foundation)<br /> * ISO/IEC 9075-3:2016 Part 3: Call-Level Interface (SQL/CLI)<br /> * ISO/IEC 9075-4:2016 Part 4: Persistent stored modules (SQL/PSM)<br /> * ISO/IEC 9075-9:2016 Part 9: Management of External Data (SQL/MED)<br /> * ISO/IEC 9075-10:2016 Part 10: Object language bindings ([[SQLJ|SQL/OLB]])<br /> * ISO/IEC 9075-11:2016 Part 11: Information and definition schemas (SQL/Schemata)<br /> * ISO/IEC 9075-13:2016 Part 13: SQL Routines and types using the Java TM programming language ([[SQLJ|SQL/JRT]])<br /> * ISO/IEC 9075-14:2016 Part 14: XML-Related Specifications ([[SQL/XML]])<br /> * ISO/IEC 9075-15:2019 Part 15: Multi-dimensional arrays (SQL/MDA)<br /> Ein weiterer Teil befindet sich derzeit (2019) in Entwicklung:<br /> * ISO/IEC 9075-16:20xx Part 16: Property Graph Queries (SQL/PGQ)<br /> <br /> Der Standard wird durch sechs, ebenfalls standardisierte ''SQL multimedia and application packages'' ergänzt:<br /> * ISO/IEC 13249-1:2016 Part 1: Framework<br /> * ISO/IEC 13249-2:2003 Part 2: Full-Text<br /> * ISO/IEC 13249-3:2016 Part 3: Spatial<br /> * ISO/IEC 13249-5:2003 Part 5: Still image<br /> * ISO/IEC 13249-6:2006 Part 6: Data mining<br /> * ISO/IEC 13249-7:2013 Part 7: History<br /> <br /> Weiterhin existieren eine Reihe Technical Reports, die eine Einführung zu den einzelnen Themen bieten.<br /> <br /> * ISO/IEC TR 19075-1:2011 Part 1: XQuery Regular Expression Support in SQL [https://standards.iso.org/ittf/PubliclyAvailableStandards/c041528_ISO_IEC_TR_19075-1_2011.zip Download]<br /> * ISO/IEC TR 19075-2:2015 Part 2: SQL Support for Time-Related Information [https://standards.iso.org/ittf/PubliclyAvailableStandards/c060394_ISO_IEC_TR_19075-2_2015.zip Download]<br /> * ISO/IEC TR 19075-3:2015 Part 3: SQL Embedded in Programs using the JavaTM programming language [https://standards.iso.org/ittf/PubliclyAvailableStandards/c065141_ISO_IEC_TR_19075-3_2015.zip Download]<br /> * ISO/IEC TR 19075-4:2015 Part 4: SQL with Routines and types using the JavaTM programming language [https://standards.iso.org/ittf/PubliclyAvailableStandards/c065142_ISO_IEC_TR_19075-4_2015.zip Download]<br /> * ISO/IEC TR 19075-5:2016 Part 5: Row Pattern Recognition in SQL [https://standards.iso.org/ittf/PubliclyAvailableStandards/c065143_ISO_IEC_TR_19075-5_2016.zip Download]<br /> * ISO/IEC TR 19075-6:2017 Part 6: SQL support for JavaScript Object Notation (JSON) [https://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip Download]<br /> * ISO/IEC TR 19075-7:2017 Part 7: Polymorphic table functions in SQL [https://standards.iso.org/ittf/PubliclyAvailableStandards/c069776_ISO_IEC_TR_19075-7_2017.zip Download]<br /> * ISO/IEC TR 19075-8:2019 Part 8: Multi-dimensional arrays (SQL/MDA)<br /> Ein weiterer Teil befindet sich derzeit (2019) in Entwicklung:<br /> * ISO/IEC TR 19075-9:20xx Part 9: Online Analytic Processing (OLAP) capabilities<br /> <br /> Der offizielle Standard ist nicht frei verfügbar, jedoch existiert ein Zip-Archiv mit einer Arbeitsversion von 2008.&lt;ref&gt;[http://www.wiscorp.com/sql200n.zip Arbeitsversion des Standards von 2008] ([[ZIP-Dateiformat|ZIP]]; 12,7&amp;nbsp;MB)&lt;/ref&gt; Die Technical Reports sind kostenlos von ISO erhältlich.<br /> <br /> == Erweiterungen ==<br /> Die beiden ersten Teile des SQL Standards ''SQL/Framework'' und ''SQL/Foundation'' legen die Kernfunktionalitäten fest. In den weiteren Teilen werden spezifische Aspekte der Sprache definiert.<br /> <br /> * Teil 4: Bei ''SQL/PSM'' handelt es sich um die Erweiterung um prozedurale Konstrukte. Sie ermöglichen unter anderem das Programmieren von Schleifen (FOR, WHILE, REPEAT UNTIL, LOOP), Cursorn, Exception-Handling, Triggern und eigenen Funktionen. Oracle implementiert diese Funktionalität unter dem Namen ''[[PL/SQL]]'', DB2 verwendet den Begriff ''[[SQL/PL]]'', PostgreSQL nennt es ''[[PL/pgSQL]]''.<br /> * Teil 14: ''[[SQL/XML]]'' ermöglicht es, [[Extensible Markup Language|XML]]-Dokumente in SQL-Datenbanken zu speichern, mit [[XPath]] in SQL/XML:2003 und [[XQuery]] ab SQL/XML:2006 abzufragen und relationale Datenbankinhalte als XML zu exportieren. Um die ursprünglichen Arbeiten an diesem Teil des Standards zu beschleunigen, hatte sich im Jahr 2000 eine informelle Arbeitsgruppe gebildet (IBM, Oracle, …), die unter dem Namen ''The SQLX Group'' und unter der Bezeichnung ''SQLX'' die Kernfunktionalitäten festlegte. Deren Arbeit ist in den jetzigen Standard eingeflossen.<br /> <br /> Als Ergänzung zum SQL-Standard existiert mit ''ISO/IEC 13249: SQL multimedia and application packages'' eine Norm, die für die Anwendungsfälle ''Text'', ''Geografische Daten'', ''Bilder'', ''Data mining'' und ''Metadaten'' spezialisierte Schnittstellen in SQL Syntax festlegt.<br /> <br /> == Literatur ==<br /> * Donald D. Chamberlin, Raymond F. Boyce: ''SEQUEL: A Structured English Query Language''. In: ''SIGMOD Workshop.'' Vol. 1 1974, S. 249–264.<br /> * Donald D. Chamberlin, Morton M. Astrahan, Kapali P. Eswaran, Patricia P. Griffiths, Raymond A. Lorie, James W. Mehl, Phyllis Reisner, Bradford W. Wade: ''SEQUEL 2: A Unified Approach to Data Definition, Manipulation, and Control''. In: ''IBM Journal of Research and Development.'' 20(6) 1976, S. 560–575.<br /> * Günter Matthiessen, Michael Unterstein: ''Relationale Datenbanken und SQL in Theorie und Praxis'' Springer Vieweg, ISBN 978-3-642-28985-9.<br /> * Edwin Schicker: ''Datenbanken und SQL – Eine praxisorientierte Einführung.'' Teubner, ISBN 3-519-02991-X.<br /> * Oliver Bartosch, Markus Throll: ''Einstieg in SQL.'' Galileo Press, ISBN 3-89842-497-9.<br /> * Daniel Warner, Günter Leitenbauer: ''SQL.'' Franzis, ISBN 3-7723-7527-8.<br /> * H. Faeskorn-Woyke, B. Bertelsmeier, P. Riemer, E. Bauer: ''Datenbanksysteme, Theorie und Praxis mit SQL2003, Oracle und MySQL.'' Pearson-Studium, ISBN 978-3-8273-7266-6.<br /> * Jörg Fritze, Jürgen Marsch: ''Erfolgreiche Datenbankanwendung mit SQL3. Praxisorientierte Anleitung – effizienter Einsatz – inklusive SQL-Tuning.'' Vieweg Verlag, ISBN 3-528-55210-7.<br /> * Can Türker: ''SQL 1999 &amp; SQL 2003.'' Dpunkt Verlag, ISBN 3-89864-219-4.<br /> * Gregor Kuhlmann, Friedrich Müllmerstadt: ''SQL.'' Rowohlt, ISBN 3-499-61245-3.<br /> * Michael J. Hernandez, John L. Viescas: ''Go To SQL.'' Addison-Wesley, ISBN 3-8273-1772-X.<br /> * A. Kemper, A. Eickler: ''Datenbanksysteme – Eine Einführung.'' Oldenbourg, ISBN 3-486-25053-1.<br /> * Marcus Throll, Oliver Bartosch: ''Einstieg in SQL 2008.'' 2. Auflage. Galileo Computing, ISBN 978-3-8362-1039-3 inklusive Übungssoftware SQL-Teacher<br /> * Marco Skulschus: ''SQL und relationale Datenbanken'' Comelio Medien, ISBN 978-3-939701-11-8.<br /> * Michael Wagner: ''SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme'' 1. Auflage. Diplomica Verlag, ISBN 3-8366-9609-6.<br /> * Christian F. G. Schendera: ''SQL mit SAS. Band 1: PROC SQL für Einsteiger''. Oldenbourg Wissenschaftsverlag, München 2011, ISBN 978-3-486-59840-7.<br /> * Christian F. G. Schendera: ''SQL mit SAS. Band 2: Fortgeschrittenes PROC SQL''. Oldenbourg Wissenschaftsverlag, München 2012, ISBN 978-3-486-59836-0.<br /> * [[Christopher J. Date|C. J. Date]] with [[Hugh Darwen]]: ''A Guide to the SQL standard: a users guide to the standard database language SQL, 4th ed.'', Addison-Wesley, USA 1997, ISBN 978-0-201-96426-4<br /> * Jim Melton: ''Advanced SQL:1999: Understanding Object-Relational and Other Advanced Features, 1st ed.'', Morgan Kaufmann, USA, 2002, ISBN 978-1558606777.<br /> <br /> == Weblinks ==<br /> {{Wikibooks|Einführung in SQL|SQL}}<br /> * [https://www.youtube.com/playlist?list=PLC4UZxBVGKte0o6iUssqQVmXhryrOqPXi Erklärvideos zu SQL], Big Data Analytics Group, Uni Saarland<br /> * {{dmoz|World/Deutsch/Computer/Programmieren/Sprachen/SQL/}}<br /> * [http://www.torsten-horn.de/techdocs/sql.htm SQL-Grundlagen] – Einführung mit Beispielen und Vergleich diverser Datenbanken<br /> * [https://esb-dev.github.io/mat/sql-merkblatt.pdf Merkblatt SQL]<br /> * [http://www.mcjones.org/System_R/SQL_Reunion_95/ The 1995 SQL Reunion: People, Projects, and Politics] – zur frühen Geschichte von SQL (englisch)<br /> * [http://www.wiscorp.com/SQLStandards.html Frei verfügbare SQL-Standard-Dokumente], z.&amp;nbsp;B. SQL:2003 und SQL:2008 (englisch)<br /> * [http://www.1keydata.com/de/sql/ SQL-Tutorial]<br /> * [http://sqltutor.fsv.cvut.cz/cgi-bin/sqltutor GNU SQLTutor]<br /> * [https://sqlcoach.informatik.hs-kl.de/sqlcoach/ SQLcoach] – Freies Üben von SQL<br /> * [https://edb2.gm.th-koeln.de/apps/sqltrainer/ Interaktiver SQL-Trainer (Anmeldung notwendig)]<br /> * [https://blog.homepage-webhilfe.de/Artikel/mysql-tutorial-fuer-anfaenger/ Blogbeitrag zu SQL-Befehlen und deren Einsatz in PHP]<br /> * [http://sql-tuning.com/ SQL Tuning]<br /> * [https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15 Transact-SQL Reference (Database Engine)]<br /> * [https://datamics.com/online-kurse/das-sql-grundlagen-bootcamp-auch-fuer-data-science/ SQL Online Kurs]<br /> * [https://lerne-sql.de SQL Tutorial]<br /> <br /> == Siehe auch ==<br /> <br /> * [[Data Manipulation Language]]<br /> * [[Data Definition Language]]<br /> * [[Data Control Language]]<br /> * [[Transaction Control Language]]<br /> * [[SQL-Injection]]<br /> * [[SchemaSQL]]<br /> * [[Continuous Query Language]]<br /> * [[Liste der Datenbankmanagementsysteme]]<br /> * [[Bereichsabfrage]]<br /> <br /> == Einzelnachweise ==<br /> &lt;references /&gt;<br /> <br /> {{Normdaten|TYP=s|GND=4134010-3|LCCN=sh/86/6628}}<br /> <br /> [[Kategorie:Datenbanksprache]]<br /> [[Kategorie:SQL| ]]<br /> [[Kategorie:Abkürzung]]<br /> [[Kategorie:Programmiersprache mit einem ISO-Standard]]</div> CommunityEditorSS https://de.wikipedia.org/w/index.php?title=Python_(Programmiersprache)&diff=210482916 Python (Programmiersprache) 2021-04-02T18:05:25Z <p>CommunityEditorSS: Info hinzugefügt</p> <hr /> <div>{{Infobox Programmiersprache<br /> | Name = <br /> | Logo = [[Datei:Python logo and wordmark.svg|230px|Logo]]<br /> | Beschreibung = <br /> | Paradigma = multiparadigmatisch<br /> | Erscheinungsjahr = &lt;!-- wikidata --&gt;<br /> | Designer = &lt;!-- wikidata --&gt;<br /> | Entwickler = &lt;!-- wikidata --&gt;<br /> | AktuelleVersion = &lt;!-- wikidata --&gt;<br /> | AktuelleVersionFreigabeDatum = &lt;!-- wikidata --&gt;<br /> | AktuelleVorabVersion = <br /> | AktuelleVorabVersionFreigabeDatum = <br /> | Typisierung = [[Starke Typisierung|stark]], [[Dynamische Typisierung|dynamisch]] („[[Duck-Typing]]“)<br /> | Implementierung = CPython, [[Jython]], [[IronPython]], [[PyPy]]<br /> | Dialekte = <br /> | Standardisierungen = <br /> | Beeinflusst_von = &lt;!-- wikidata --&gt;<br /> | Beeinflusste = [[Ruby (Programmiersprache)|Ruby]], [[Boo (Programmiersprache)|Boo]], [[Groovy]], [[Cython]], [[JavaScript]], [[Swift (Programmiersprache)|Swift]]<br /> | Betriebssystem = <br /> | Lizenz = &lt;!-- wikidata --&gt;<br /> | Website = &lt;!-- wikidata --&gt;<br /> }}<br /> <br /> '''Python''' ([{{IPA|ˈpʰaɪθn̩}}], [{{IPA|ˈpʰaɪθɑn}}], auf Deutsch auch [{{IPA|ˈpʰyːtɔn}}]) ist eine universelle, üblicherweise [[Interpreter|interpretierte]], [[höhere Programmiersprache]].&lt;ref&gt;{{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}}&lt;/ref&gt; Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern.&lt;ref&gt;{{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}}&lt;/ref&gt; So werden beispielsweise [[Blockstruktur|Blöcke]] nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert.<br /> <br /> Python unterstützt mehrere [[Programmierparadigma|Programmierparadigmen]], z.&amp;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.<br /> <br /> == Entwicklungsgeschichte ==<br /> [[Datei:Guido van Rossum.jpg|mini|hochkant|[[Guido van Rossum]], der Entwickler von Python]]<br /> Die Sprache wurde Anfang der 1990er Jahre von [[Guido van Rossum]] am [[Centrum Wiskunde &amp; 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.<br /> <br /> Der Name geht nicht (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]].&lt;ref&gt;[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]&lt;/ref&gt; Trotzdem etablierte sich die [[Assoziation (Psychologie)|Assoziation]] zur Schlange, was sich unter anderem in der Programmiersprache [[Cobra (Programmiersprache)|Cobra]]&lt;ref&gt;{{cite web|url=http://cobra-language.com/|title=The Cobra Programming Language|work=cobra-language.com}}&lt;/ref&gt; sowie dem Python-Toolkit „Boa“&lt;ref&gt;{{cite web|url=http://boa-constructor.sourceforge.net/|title=Boa Constructor home|work=boa-constructor.sourceforge.net}}&lt;/ref&gt; äußert.<br /> &lt;!-- brauchen wir das?<br /> Über den Ursprung der Sprache führte van Rossum retrospektiv 1996 aus:<br /> <br /> {{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).<br /> |Ü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=<br /> &lt;ref&gt;{{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}}&lt;/ref&gt;}}<br /> --&gt;<br /> 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.&lt;ref&gt;{{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}}&lt;/ref&gt; Von 1995 bis 2000 erschienen neue Versionen, die fortlaufend als Python 1.1, 1.2 etc. bezeichnet wurden.<br /> <br /> Python 2.0 erschien am 16.&amp;nbsp;Oktober 2000. Neue Funktionen umfassten eine voll funktionsfähige [[Garbage Collection]] (automatische Speicherbereinigung) und die Unterstützung für den [[Unicode]]-Zeichensatz.&lt;ref&gt;{{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}}&lt;/ref&gt; 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.&lt;ref&gt;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&lt;/ref&gt;<br /> <br /> Python 3.0 (auch Python 3000) erschien am 3.&amp;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,&lt;ref&gt;{{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}}&lt;/ref&gt; 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 zu noch erscheinenden 2er-Versionen, dem Supportende und Hilfe zur Migration siehe Abschnitt ''[[#Ende von Python 2|Ende von Python 2]]'').<br /> <br /> == Ziele ==<br /> 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.&lt;ref&gt;[https://docs.python.org/3/reference/lexical_analysis.html#keywords ''2. Lexical analysis''] Python 3.7.2rc1 documentation. (englisch)&lt;/ref&gt; Zum anderen ist die Syntax reduziert und auf Übersichtlichkeit optimiert. Dadurch lassen sich Python-basierte Skripte deutlich knapper formulieren als in anderen Sprachen.&lt;ref&gt;{{Literatur |Autor=Marty Alchin |Hrsg=Apress |Titel=Pro Python |Datum=2010 |ISBN=978-1-4302-2757-1 |Seiten=6 |Sprache=en}}&lt;/ref&gt;<br /> <br /> 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.&lt;ref&gt;{{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}}&lt;/ref&gt;<br /> Durch dieses Konzept wurde es auch ermöglicht, Python-Programme in anderen Sprachen als Module einzubetten, um z.&amp;nbsp;B. Schwächen von Python zu umgehen. Beispielsweise können für zeitkritische Teile Routinen in maschinennäheren Sprachen wie z.&amp;nbsp;B. [[C (Programmiersprache)|C]] aufgerufen werden.&lt;ref&gt;{{Internetquelle |url=https://docs.python.org/3.7/extending/extending.html |titel=Verwendung fremdsprachiger Module |hrsg=Python Software Foundation |sprache=en |abruf=2019-09-10}}&lt;/ref&gt; Umgekehrt lassen sich mit Python Module und [[Plug-in]]s für andere Programme schreiben, die die entsprechende Unterstützung bieten. Dies ist z.&amp;nbsp;B. bei [[Blender (Software)|Blender]], [[Cinema 4D]], [[GIMP]], [[Maya (Software)|Maya]], [[Apache OpenOffice|OpenOffice]] bzw. [[LibreOffice]], [[PyMOL]], [[SPSS]], [[QGIS]] oder [[KiCad]] der Fall.<br /> <br /> Python ist eine Multi[[Programmierparadigma|paradigmen]]&lt;nowiki /&gt;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.<br /> Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt durch [[Referenzzählung]].<br /> [[Datentyp]]en werden dynamisch verwaltet, eine automatische statische [[Typsicherheit|Typprüfung]] wie z.&amp;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.&lt;ref&gt;{{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}}&lt;/ref&gt;&lt;ref&gt;{{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}}&lt;/ref&gt;<br /> <br /> == Datentypen und Strukturen ==<br /> [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]]<br /> 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.<br /> <br /> 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.&amp;nbsp;B. durch Ersetzen von Zeichen – immer eine neue Zeichenkette zurück.<br /> <br /> 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.&amp;nbsp;h. Datentypen werden dynamisch vergeben, so wie bei [[Smalltalk (Programmiersprache)|Smalltalk]] oder [[Lisp]] – und nicht wie bei Java.<br /> <br /> 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]].<br /> 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.<br /> <br /> Mit dem Format-Operator &lt;code&gt;%&lt;/code&gt; gibt es eine implizite Umwandlung eines Objekts in eine Zeichenkette. Der Operator &lt;code&gt;==&lt;/code&gt; überprüft zwei Objekte auf (Wert-)Gleichheit. Der Operator &lt;code&gt;is&lt;/code&gt; überprüft die tatsächliche [[Identität (Logik)|Identität]] zweier Objekte.&lt;ref&gt;{{cite web|url=http://my.safaribooksonline.com/0596002815|title=Learning Python, 2nd Edition|first1=Mark|last1=Lutz|first2=David|last2=Ascher|date=2003-12-23|publisher=O'Reilly Media, Inc.|work=Safari Books Online}}&lt;/ref&gt;<br /> <br /> === Sammeltypen ===<br /> 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.&amp;nbsp;B. erweiterbare Felder, wohingegen Tupel und Zeichenketten eine feste Länge haben und unveränderlich sind.<br /> <br /> Der Zweck solcher Unveränderlichkeit hängt z.&amp;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 ''Dictionaries'' vom Typ „unveränderlich“ sein. Die ins ''Dictionary'' eingetragenen ''Werte'' können dagegen von beliebigem Typ sein.<br /> <br /> ''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.<br /> <br /> === Objektsystem ===<br /> 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]].<br /> <br /> 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.<br /> <br /> == Syntax ==<br /> 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]]:<br /> * zwei Schleifenformen<br /> ** &lt;code&gt;for&lt;/code&gt; zur Iteration über die Elemente einer Sequenz<br /> ** &lt;code&gt;while&lt;/code&gt; zur Wiederholung einer Schleife, solange ein logischer Ausdruck wahr ist.<br /> * Verzweigungen<br /> ** &lt;code&gt;if … elif … else&lt;/code&gt; für Verzweigungen<br /> <br /> Beim letzten Punkt bieten andere Programmiersprachen zusätzlich &lt;code&gt;switch&lt;/code&gt; und/oder &lt;code&gt;goto&lt;/code&gt;. Diese wurden zugunsten der Lesbarkeit in Python weggelassen und müssen durch &lt;code&gt;if&lt;/code&gt;-Konstrukte oder andere Verzweigungsmöglichkeiten (Slices, Wörterbücher) abgebildet werden. Im Gegensatz zu vielen anderen Sprachen können &lt;code&gt;for&lt;/code&gt;- und &lt;code&gt;while&lt;/code&gt;-Schleifen einen &lt;code&gt;else&lt;/code&gt;-Zweig haben. Dieser wird nur ausgeführt, wenn die Schleife vollständig durchlaufen wurde und nicht mittels &lt;code&gt;break&lt;/code&gt; abgebrochen wird.<br /> <br /> === Strukturierung durch Einrücken ===<br /> 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. 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.<br /> <br /> Hierzu als Beispiel die Berechnung der [[Fakultät (Mathematik)|Fakultät]] einer Ganzzahl, einmal in [[C (Programmiersprache)|C]] und einmal in Python:<br /> <br /> Fakultätsfunktion in C:<br /> &lt;syntaxhighlight lang=&quot;c&quot;&gt;<br /> int factorial(int x) {<br /> if (x &lt;= 1)<br /> return 1;<br /> <br /> return x * factorial(x - 1);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Die gleiche Funktion in Python:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def factorial(x):<br /> if x &lt;= 1:<br /> return 1<br /> <br /> return x * factorial(x - 1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> 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.<br /> <br /> Man kann die Fakultätsfunktion aber auch wie in C einzeilig mit [[Ternärer Operator|ternärem Operator]] formulieren:<br /> <br /> Die Fakultätsfunktion in C:<br /> &lt;syntaxhighlight lang=&quot;c&quot;&gt;<br /> int factorial(int x) {<br /> return x &lt;= 1 ? 1 : x * factorial(x - 1);<br /> }<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Die Fakultätsfunktion in Python:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def factorial(x):<br /> return 1 if x &lt;= 1 else x * factorial(x - 1)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> === Funktionales Programmieren ===<br /> Coconut&lt;ref&gt;[http://coconut-lang.org/ Coconut] (Erweiterung zu Pyhon)&lt;/ref&gt; und andere Erweiterungen erleichtern das funktionale Programmieren in Python. Darüber hinaus lässt sich dies auch mit dem herkömmlichen Python realisieren:<br /> <br /> 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:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> zahlen = [1, 2, 3, 4, 5]<br /> zweierpotenzen = [2 ** n for n in zahlen]<br /> &lt;/syntaxhighlight&gt;<br /> Weil in Python Funktionen als Argumente auftreten dürfen, kann man auch ausgeklügeltere Konstruktionen ausdrücken, wie den [[Continuation-Passing Style]].<br /> <br /> Pythons Schlüsselwort &lt;code&gt;lambda&lt;/code&gt; könnte manche Anhänger der funktionalen Programmierung fehlleiten. Solche &lt;code&gt;lambda&lt;/code&gt;-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]]:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def add_and_print_maker(x):<br /> def temp(y):<br /> print(&quot;{} + {} = {}&quot;.format(x, y, x + y))<br /> <br /> return temp<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Damit ist auch [[Currying]] auf einfache Art möglich, um generische Funktionsobjekte auf problemspezifische herunterzubrechen. Hier ein einfaches Beispiel:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def curry(func, known_argument):<br /> return lambda unknown_argument: func(unknown_argument, known_argument)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Wird die &lt;code&gt;curry&lt;/code&gt;-Funktion aufgerufen, erwartet diese eine Funktion mit zwei notwendigen Parametern sowie die Parameterbelegung für den zweiten Parameter dieser Funktion. Der Rückgabewert von &lt;code&gt;curry&lt;/code&gt; ist eine Funktion, die das Gleiche tut wie &lt;code&gt;func&lt;/code&gt;, aber nur noch einen Parameter benötigt.<br /> <br /> [[Closure (Funktion)|Closures]] sind mit den o.&amp;nbsp;g. Mechanismen in Python ebenfalls einfach möglich. Ein simples Beispiel für einen [[Stapelspeicher|Stack]], intern durch eine Liste repräsentiert:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def stack():<br /> l = []<br /> <br /> def pop():<br /> if not is_empty():<br /> return l.pop()<br /> <br /> def push(element):<br /> l.append(element)<br /> <br /> def is_empty():<br /> return len(l) == 0<br /> <br /> return pop, push, is_empty<br /> <br /> pop, push, is_empty = stack()<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Auf diese Weise erhält man die drei Funktionsobjekte &lt;code&gt;pop&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;, &lt;code&gt;is_empty&lt;/code&gt;, um den Stack zu modifizieren bzw. auf enthaltene Elemente zu prüfen, ohne &lt;code&gt;l&lt;/code&gt; direkt modifizieren zu können.<br /> <br /> === Ausnahmebehandlung ===<br /> 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.<br /> <br /> Ausnahmen haben einige Vorteile gegenüber anderen beim Programmieren üblichen Verfahren der Fehlerbehandlung (wie z.&amp;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.<br /> <br /> 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:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> while True:<br /> num = input(&quot;Eine ganze Zahl eingeben: &quot;)<br /> <br /> try:<br /> num = int(num)<br /> except ValueError:<br /> print(&quot;Eine _Zahl_, bitte!&quot;)<br /> else:<br /> break<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Dieses Programmstück fragt den Benutzer so lange nach einer Zahl, bis dieser eine Zeichenfolge eingibt, die sich per &lt;code&gt;int()&lt;/code&gt; 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.<br /> <br /> Ebenso kann auch das hier nicht berücksichtigte [[Interrupt]]-Signal (&lt;code&gt;SIGINT&lt;/code&gt;, häufig Strg+C) mittels Ausnahmebehandlung in Python abgefangen und behandelt werden (&lt;code&gt;except KeyboardInterrupt: …&lt;/code&gt;).<br /> <br /> == Standardbibliothek ==<br /> 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.<br /> <br /> 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.<br /> <br /> == Grafische Benutzeroberflächen (GUI) ==<br /> 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.&amp;nbsp;B. [[PyGTK]], [[PyQt]], [[wxPython]], [[PyObjC]] und Py[[FLTK]] zur Verfügung.<br /> <br /> Neben Tkinter wird auch ein Modul zum Zeichnen von [[Turtle-Grafik]]en mitgeliefert.<br /> <br /> === Beispiel zum Tkinter-Modul ===<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> import tkinter as tk<br /> <br /> fenster = tk.Tk()<br /> fenster.geometry(&quot;200x100&quot;)<br /> label = tk.Label(fenster, text=&quot;Hallo Welt!&quot;)<br /> label.pack()<br /> <br /> def befehl():<br /> fenster.destroy()<br /> <br /> button = tk.Button(fenster, text=&quot;OK&quot;, command=befehl)<br /> button.pack()<br /> &lt;/syntaxhighlight&gt;<br /> [[Datei:Tkinter Hallo Welt.png|zentriert|mini|184x184px|Beispiel für ein einfaches Tkinter-Fenster]]<br /> <br /> === Beispiel zum Turtle-Grafik-Modul ===<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> import turtle<br /> from turtle import speed, reset, goto<br /> <br /> reset()<br /> speed(0)<br /> turtle.x = -200<br /> turtle.y = 200<br /> <br /> while turtle.y != -200:<br /> goto(turtle.x, turtle.y)<br /> turtle.x = - turtle.x<br /> turtle.y = - turtle.y<br /> goto(turtle.x, turtle.y)<br /> goto(0, 0)<br /> turtle.y = - turtle.y<br /> turtle.x = - turtle.x<br /> turtle.y -= 5<br /> &lt;/syntaxhighlight&gt;<br /> [[Datei:Beispiel für ein Turtle-Muster.png|zentriert|mini|Ergebnis des angegebenen Quellcodes]]<br /> <br /> ==== Weitere Grafiken ====<br /> &lt;gallery class=&quot;center&quot; widths=&quot;175&quot;&gt;<br /> Python Kreis-Muster.png|Bunter Kreis<br /> Python Turtle Muster Stern.png|Stern<br /> Turtle-Programmierung.gif|Die Turtle zeichnet ein Quadrat<br /> &lt;/gallery&gt;<br /> <br /> == Beispiel ==<br /> Als nicht triviales Beispiel sei hier der kompakte Sortieralgorithmus [[Quicksort]] angegeben:<br /> <br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> def quicksort(liste):<br /> if len(liste) &lt;= 1:<br /> return liste<br /> <br /> pivotelement = liste.pop()<br /> links = [element for element in liste if element &lt; pivotelement]<br /> rechts = [element for element in liste if element &gt;= pivotelement]<br /> <br /> return quicksort(links) + [pivotelement] + quicksort(rechts)<br /> &lt;/syntaxhighlight&gt;<br /> <br /> Hier ermöglicht insbesondere die Listennotation für die Variablen ''links'' und ''rechts'' eine kompakte Darstellung. Zum Vergleich eine iterative Formulierung dieser zwei Zeilen:<br /> &lt;syntaxhighlight lang=&quot;python&quot;&gt;<br /> ...<br /> links, rechts = [], [] # leere Listen für links und rechts anlegen<br /> pivotelement = liste.pop() # das letzte Element aus der Liste nehmen als Referenz<br /> <br /> for element in liste: # die restlichen Elemente der Liste durchlaufen ...<br /> if element &lt; pivotelement: # ... und mit dem Pivot-Element vergleichen<br /> links.append(element) # wenn kleiner, dann an linke Liste anhängen<br /> else:<br /> rechts.append(element) # ansonsten, wenn nicht kleiner, dann an rechte Liste anhängen<br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> 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.<br /> <br /> == Interaktive Benutzung ==<br /> 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.<br /> <br /> 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.<br /> <br /> == Implementierungen ==<br /> 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 [[Just-in-time-Kompilierung|Just-in-time-Compiler]] für Python, [[PyPy]], welcher von der EU gefördert wurde, sind ebenfalls in Entwicklung. Außerdem existiert ein Python-Interpreter für [[Mikrocontroller]] namens [[MicroPython]].&lt;ref&gt;{{cite web|url=https://micropython.org/|title=MicroPython – Python for microcontrollers|work=micropython.org}}&lt;/ref&gt;<br /> <br /> == Entwicklungsumgebung ==<br /> Neben [[IDLE (Python)|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]] 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.<br /> <br /> Für die verschiedenen [[GUI-Toolkit]]s, wie z.&amp;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.<br /> <br /> == Paketverwaltung ==<br /> 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'' verwaltet.&lt;ref&gt;{{Internetquelle |url=http://conda.pydata.org/docs/ |titel=Conda documentation |sprache=en |abruf=2016-02-25}}&lt;/ref&gt;<br /> <br /> == Verbreitung und Einsatz ==<br /> 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.<br /> <br /> 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.<br /> <br /> === Kommerzieller Einsatz ===<br /> Bekannte kommerzielle Projekte, etwa [[Google]] und [[YouTube]], basieren in Teilen auf Python.&lt;ref&gt;[https://www.python.org/about/quotes/ ''Quotes about Python'']. Abgerufen am 25. Juni 2011.&lt;/ref&gt; Auch in der Spieleindustrie findet die Sprache bisweilen Einsatz, etwa in ''[[EVE Online]]'', ''[[World in Conflict]]'' und ''[[Civilization IV]]''.<br /> <br /> === In der Lehre ===<br /> 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.&lt;ref&gt;[https://cscircles.cemc.uwaterloo.ca/de/ Computer Science Circles] – ein kostenfreier Dienst des Centre for Education in Mathematics and Computing, University of Waterloo.&lt;/ref&gt;&lt;ref&gt;[https://appcamps.de/unterrichtsmaterial/programmieren-mit-python/ Programmieren lernen mit Python]. App Camps gemeinnützige Unternehmergesellschaft, Hamburg&lt;/ref&gt;&lt;ref&gt;[https://www.udacity.com/course/programming-for-data-science-nanodegree--nd104 Programming for Data Science with Python], Udacity&lt;/ref&gt;<br /> &lt;ref&gt;[https://web2-unterricht.ch/2017/09/einstieg-ins-programmieren-mit-python/ Einstieg ins Programmieren mit Python]. Web 2 Unterricht, 3. September 2017&lt;/ref&gt;&lt;ref&gt;[https://bildungsserver.berlin-brandenburg.de/inf-sek1-python-bb Python – die Programmiersprache für imperative und objektorientierte Programmierung]. Bildungsserver Berlin-Brandenburg&lt;/ref&gt;&lt;ref&gt;[https://informatik.bildung-rp.de/fortbildung/fortbildungsmaterial/programmieren-mit-python.html Programmieren mit Python]. Bildungsserver Rheinland-Pfalz&lt;/ref&gt; Lehrbücher, die sich explizit an junge Menschen ohne Programmiererfahrung wenden, unterstützen und unterstreichen diese Entwicklung.&lt;ref&gt;Man vergleiche z.&amp;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&lt;/ref&gt;<br /> <br /> 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.&lt;ref&gt;OLPC-[[Wiki]]: „[http://wiki.laptop.org/go/Python Python für den 100-Dollar-Laptop]“&lt;/ref&gt; Damit soll Kindern die Möglichkeit gegeben werden, die dahinter liegende Informationstechnik real zu erleben und nach Belieben „hinter die Kulissen“ zu schauen.<br /> <br /> Der Einplatinen-Computer [[Raspberry Pi]] ''(Python Interpreter)'' sollte ursprünglich mit einem im [[ROM]] integrierten Python-Interpreter ausgeliefert werden.&lt;ref&gt;{{cite web|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=}}&lt;/ref&gt; Auch heute ist Python eine der bevorzugtesten Sprachen für den Raspberry Pi. Sein Standard-Betriebssystem [[Raspberry Pi|Raspberry Pi OS]] kommt mit einer großen Python-Bibliothek zur Ansteuerung der Hardware.<br /> <br /> Python wird weltweit in der Informatikausbildung an Schulen und Universitäten eingesetzt. So stehen 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.&amp;nbsp;B. wird von der Universität Waterloo in Kanada bereitgestellt. Die deutsche Version wird betrieben von den deutschen Bundesweiten Informatikwettbewerben.&lt;ref&gt;[https://bwinf.de/programmierenlernen/#collapse-7235 Programmieren lernen]. Bundesweite Informatikwettbewerbe. Ein Projekt der Gesellschaft für Informatik e.&amp;nbsp;V., des Fraunhofer-Verbunds IUK-Technologie und des Max-Planck-Instituts für Informatik.&lt;/ref&gt; TigerJython, gehostet von der Pädagogischen Hochschule Bern, wird vor allem in der Schweiz im Informatikunterricht eingesetzt.&lt;ref&gt;[http://www.tigerjython.ch/download/flyer.pdf Flyer TigerJython – Programmierkonzepte mit Python]. Pädagogischen Hochschule Bern&lt;/ref&gt;<br /> <br /> === In der Wissenschaft ===<br /> 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. [[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.&amp;nbsp;a. gibt es große Bibliotheken zur Forschung und Nutzung von [[Maschinelles Lernen|maschinellem Lernen]] und [[Deep Learning]] (''[[Künstliche Intelligenz]]'').<br /> <br /> == Ende von Python 2 ==<br /> Die Unterstützung für Python 2 ist beendet. Die finale 2er-Version war die 2.7.18 vom 20. April 2020;&lt;ref&gt;[https://pythoninsider.blogspot.com/2020/04/python-2718-last-release-of-python-2.html Python Insider: Python 2.7.18, the last release of Python 2]&lt;/ref&gt;&lt;ref&gt;[https://www.heise.de/developer/meldung/Lang-lebe-Python-3-Finales-Release-besiegelt-End-of-Life-fuer-Python-2-4706247.html Programmiersprachen: Lang lebe Python 3 – finales Release von Python 2]&lt;/ref&gt; seit diesem Datum wird Python 2 nicht mehr unterstützt.&lt;ref&gt;[https://www.python.org/psf/press-release/pr20191220/ Python 2 series to be retired by April 2020], Presseerklärung der Python Software Foundation, 20. Dezember 2019.&lt;/ref&gt;&lt;ref&gt;[https://www.golem.de/news/programmiersprache-python-2-7-bekommt-letztes-release-im-april-2020-1912-145785.html Python 2.7 bekommt letztes Release im April 2020], golem.de, 30. Dezember 2019.&lt;/ref&gt;<br /> Es gibt aber vielfältige und umfangreiche Dokumentationen zum Umstieg&lt;ref&gt;Offizielles HOWTO: https://docs.python.org/3.7/howto/pyporting.html&lt;/ref&gt;&lt;ref&gt;The Conservative Python 3 Porting Guide: https://portingguide.readthedocs.io/en/latest/&lt;/ref&gt;&lt;ref&gt;Supporting Python 3: An in-depth guide: http://python3porting.com/bookindex.html&lt;/ref&gt; und auch Tools, die bei der Migration helfen&lt;ref&gt;2to3: https://docs.python.org/2/library/2to3.html&lt;/ref&gt; oder es ermöglichen, Code zu schreiben, der mit Python 2 und 3 funktioniert.&lt;ref&gt;six: http://pypi.python.org/pypi/six/ und https://pythonhosted.org/six/&lt;/ref&gt;&lt;ref&gt;Python-Modernize: https://python-modernize.readthedocs.io/en/latest/&lt;/ref&gt;&lt;ref&gt;Python-Future/futurize: http://python-future.org/&lt;/ref&gt;&lt;ref&gt;Sixer: https://pypi.python.org/pypi/sixer&lt;/ref&gt;&lt;ref&gt;2to6: https://github.com/limodou/2to6&lt;/ref&gt;<br /> <br /> == Kritik ==<br /> 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ährigem Python-Entwickler&lt;ref&gt;{{Internetquelle |url=https://www.oreilly.com/pub/au/3082 |titel=A. M. Kuchling |sprache=en |abruf=2020-09-01}}&lt;/ref&gt;, als unelegant und nicht objektorientiert empfunden.&lt;ref name=&quot;KuchlingWarts&quot;&gt;{{Webarchiv |url=http://www.amk.ca/python/writing/warts.html |text= |wayback=20031002184114}}&lt;/ref&gt; Python-Schöpfer van Rossum verweist hingegen darauf, dass es nötig sei, um bestimmte wichtige Konstrukte zu ermöglichen.&lt;ref&gt;Guido van Rossum: [http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html Why explicit self has to stay]&lt;/ref&gt; Einer der Python-Grundsätze lautet zudem „Explicit is better than implicit“.&lt;ref name=&quot;Zen&quot; /&gt;<br /> <br /> 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&amp;nbsp;3.0 wurde dieser Kritikpunkt behoben.&lt;ref&gt;{{cite web|url=https://www.python.org/dev/peps/pep-3135/|title=PEP 3135 -- New Super|work=Python.org}}&lt;/ref&gt;<br /> <br /> 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.&lt;ref&gt;{{cite web|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}}&lt;/ref&gt;&lt;ref&gt;{{cite web|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}}&lt;/ref&gt;<br /> <br /> In den vorherrschenden Implementationen ist die Ausführungsgeschwindigkeit niedriger als bei vielen kompilierbaren Sprachen,&lt;ref name=&quot;shootout-c&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=gpp|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; aber ähnlich wie bei [[Perl (Programmiersprache)|Perl]],&lt;ref name=&quot;shootout-perl&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=perl|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; [[PHP]],&lt;ref name=&quot;shootout-php-1&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=php|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; [[Dart (Programmiersprache)|Dart]]&lt;ref name=&quot;shootout-php-2&quot;&gt;{{cite web|url=http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=python3&amp;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&amp;lang2=dart|archivedate=2015-12-26|offline=yes}}&lt;/ref&gt; und [[Ruby (Programmiersprache)|Ruby]].&lt;ref name=&quot;shootout-ruby&quot;&gt;{{cite web|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}}&lt;/ref&gt; Das liegt zum Teil daran, dass bei der Entwicklung von CPython der Klarheit des Codes gegenüber der Geschwindigkeit Vorrang eingeräumt wird.&lt;ref&gt;{{Toter Link| date= 2009-12-23 | url=http://www6.uniovi.es/python/dev/culture/ | text=Python Culture}}&lt;/ref&gt; 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,&lt;ref&gt;{{cite web|url=https://www.python.org/doc/essays/list2str/|title=Python Patterns – An Optimization Anecdote|work=Python.org}}&lt;/ref&gt; 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.<br /> <br /> == Literatur ==<br /> '''Für den Einstieg'''<br /> * {{Literatur<br /> |Autor=Allen B. Downey<br /> |Titel=Programmieren lernen mit Python<br /> |Auflage=2.<br /> |Verlag=O'Reilly<br /> |Ort=Köln (u.&amp;nbsp;a.)<br /> |Datum=2014<br /> |ISBN=978-3-95561-806-3<br /> |Seiten=297<br /> |Übersetzer=Stefan Fröhlich}}<br /> * {{Literatur<br /> |Autor=Bernd Klein<br /> |Titel=Einführung in Python 3. Für Ein- und Umsteiger<br /> |Auflage=2., überarb. und erw.<br /> |Verlag=Hanser<br /> |Ort=München<br /> |Datum=2014<br /> |ISBN=978-3-446-44133-0<br /> |Seiten=494<br /> |Online=[http://d-nb.info/1056934255/04 Inhaltsverzeichnis]}}<br /> * {{Literatur<br /> |Autor=Thomas Theis<br /> |Titel=Einstieg in Python. Ideal für Programmieranfänger geeignet<br /> |Auflage=4., akt. u. erw.<br /> |Verlag=Galileo Press<br /> |Ort=Bonn<br /> |Datum=2014<br /> |ISBN=978-3-8362-2861-9<br /> |Seiten=478<br /> |Online=[http://d-nb.info/1044867264/04 Inhaltsverzeichnis]}}<br /> * {{Literatur<br /> |Autor=Mark Lutz<br /> |Titel=Learning Python<br /> |Auflage=5.<br /> |Verlag=O'Reilly<br /> |Ort=Sebastopol (u.&amp;nbsp;a.)<br /> |Datum=2013<br /> |ISBN=978-1-4493-5573-9<br /> |Seiten=1540<br /> |Online=[https://cdn.oreillystatic.com/oreilly/booksamplers/9781449355739_sampler.pdf Inhaltsverzeichnis]}}<br /> * Hans Petter Langtangen: [http://www.springer.com/978-3-642-54958-8/ ''A Primer on Scientific Programming with Python.'']&lt;br /&gt;Springer, 4. Auflage 2014, ISBN 978-3-642-54958-8<br /> * Mark Pilgrim, Florian Wollenschein: ''Python 3 – Intensivkurs'', Springer, 1. Auflage 2010, ISBN 978-3-642-04376-5&lt;br /&gt;(Deutsche Übersetzung von Dive Into Python 3 [http://books.google.de/books?id=Va-HxHRndAUC&amp;printsec=frontcover&amp;dq=Python+3++Intensivkurs++Projekte+erfolgreich+realisieren&amp;hl=de&amp;ei=jEwfTeO2OMKDOuzP_f0I&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=1&amp;ved=0CCsQ6AEwAA#v=onepage&amp;q&amp;f=false bei google-books])<br /> * Mark Pilgrim: [http://www.diveintopython3.net/ ''Dive Into Python 3''] Springer, 2. Auflage 2009, ISBN 1-4302-2415-0 (Download verfügbar)<br /> * {{Literatur<br /> |Autor=John Paul Mueller<br /> |Titel=Python programmieren lernen für Dummies<br /> |Auflage=1.<br /> |Verlag=Wiley<br /> |Ort=Weinheim<br /> |Datum=2015<br /> |ISBN=978-3-527-71148-2<br /> |Seiten=379<br /> |Online=[http://d-nb.info/106110463X bei der Deutschen Nationalbibliothek]}}<br /> * {{Literatur<br /> |Hrsg=Martina Glöde<br /> |Titel=Programmieren supereasy. Einfacher Einstieg in Scratch und Python<br /> |Verlag=Dorling Kindersley<br /> |Ort=München<br /> |Datum=2015<br /> |ISBN=978-3-8310-2700-2<br /> |Seiten=224<br /> |Übersetzer=Birgit Reit}}<br /> * {{Literatur<br /> |Autor=Warren D. Sande; Carter Sande<br /> |Titel=Hello World! Programmieren für Kids und andere Anfänger<br /> |Auflage=2., akt. u. erw.<br /> |Verlag=Hanser<br /> |Ort=München<br /> |Datum=2014<br /> |ISBN=978-3-446-43806-4<br /> |Seiten=475<br /> |Übersetzer=Jürgen Dubau}}<br /> * 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.<br /> <br /> '''Referenzen'''<br /> * {{Literatur |Autor=Michael Weigend |Titel=Python ge-packt |Auflage=6. |Verlag=mitp |Ort=Frechen |Datum=2015 |ISBN=978-3-8266-8726-6 |Seiten=644}}<br /> * {{Literatur |Autor=Johannes Ernesti; Peter Kaiser |Titel=Python 3. Das umfassende Handbuch |Auflage=5., aktualisierte Auflage |Verlag=Rheinwerk |Ort=Bonn |Datum=2017 |ISBN=978-3-8362-5864-7 |Seiten= |Kommentar=OpenBook beim Verlag |Online=http://openbook.rheinwerk-verlag.de/python/index.html}}<br /> * {{Literatur |Autor=Mark Lutz |Titel=Python. Kurz &amp; gut |Auflage=5. |Verlag=O'Reilly |Ort=Köln (u.&amp;nbsp;a.) |Datum=2014 |ISBN=978-3-95561-770-7 |Seiten=270}}<br /> <br /> '''Weiterführendes'''<br /> * {{Literatur<br /> |Autor=Luciano Ramalho<br /> |Titel=Fluent Python. Clear, concise, and effective programming<br /> |Auflage=1.<br /> |Verlag=O’Reilly<br /> |Ort=Sebastopol CA (u.&amp;nbsp;a.)<br /> |Datum=2015<br /> |ISBN=978-1-4919-4600-8<br /> |Seiten=744<br /> |Online=[http://bvbr.bib-bvb.de:8991/exlibris/aleph/a22_1/apache_media/QDHFF57C5UX7TT18ESHPJBRN4BIRKL.pdf Inhaltsverzeichnis]}}<br /> * Gregor Lingl: ''Python für Kids'', bhv, 4. Auflage 2010, ISBN 3-8266-8673-X.<br /> * Farid Hajji: ''Das Python-Praxisbuch'', Addison-Wesley, 1. Auflage 2008, ISBN 978-3-8273-2543-3.<br /> * Hans P. Langtangen: ''Python Scripting for Computational Science'', Springer, 3. Auflage 2008, ISBN 3-540-43508-5.<br /> * Michael Weigend: ''Objektorientierte Programmierung mit Python'', mitp-Verlag, 1. Auflage 2006, ISBN 3-8266-0966-2.<br /> * {{Literatur<br /> |Autor=Felix Bittmann<br /> |Titel=Praxishandbuch Python 3. Konzepte der Programmierung verstehen und anwenden<br /> |Auflage=1.<br /> |Verlag=Books on Demand<br /> |Ort=Norderstedt<br /> |Datum=2020<br /> |ISBN=978-3-7519-0058-4<br /> |Seiten=240<br /> |Online=[https://www.bod.de/booksample?json=http%3A%2F%2Fwww.bod.de%2Fgetjson.php%3Fobjk_id%3D3088612%26hash%3Dc7f93fc149a3fb3c3f93e527763ece0c Inhaltsverzeichnis]}}<br /> <br /> == Weblinks ==<br /> {{Commonscat|Python (programming language)|Python}}<br /> {{Wikibooks|Python unter Linux|Python 2 unter Linux}}<br /> * [https://www.python.org/ Offizielle Website] (englisch)<br /> * [http://www.python-forum.de/ Das deutsche Python-Forum]<br /> <br /> === Tutorials ===<br /> ==== Für Anfänger ====<br /> * [https://pythonexamples.org/ Python Examples] (englisch)<br /> * [http://www.python-kurs.eu/index.php Python-Kurs.eu – Online-Kurse und Tutorials für Python 2 und 3]<br /> * [https://cscircles.cemc.uwaterloo.ca/using-website-de/ Online-Kurs der University of Waterloo] (deutsch/englisch/französisch)<br /> * Automate the Boring Stuff with Python: [https://automatetheboringstuff.com/ Practical programming for total beginners] (englisch)<br /> * Python Online Kurs: [https://datamics.com/online-kurse/python-das-python-grundlagen-bootcamp-von-0-auf-100/]<br /> * Python Tutorial: [https://lerne-python.de/]<br /> <br /> ==== Für Fortgeschrittene ====<br /> * PythonProgramming.net: [https://pythonprogramming.net/ Python-Tutorials für Data analysis, Machine learning &amp; GUIs] (englisch)<br /> * PyData: [https://www.youtube.com/user/PyDataTV/ Python-Vorträge und -Tutorials für Data analysis, Machine learning etc.] (englisch)<br /> * Awesome Python: [https://awesome-python.com/ Liste von Frameworks, Bibliotheken und Ressourcen, nach Themen gegliedert] (englisch)<br /> * Python 3 – Das umfassende Handbuch: [https://openbook.rheinwerk-verlag.de/python/ Rheinwerk openbook zu Python 3] (deutsch)<br /> <br /> ==== Für Kinder ====<br /> * [http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/ Snake Wrangling for Kids – Learning to Program with Python] von Jason R. Briggs, für Kinder ab acht Jahren, [[Creative Commons]] Lizenz (englisch)<br /> * [https://biologie-lernprogramme.de/daten/media/swfk-de-win-2012-02.pdf Schlangengerangel für Kinder – Programmieren Lernen für Kinder], für Kinder ab acht Jahren, [[Creative Commons]] Lizenz (deutsch)<br /> <br /> == Einzelnachweise ==<br /> &lt;references responsive&gt;<br /> &lt;ref name=&quot;Zen&quot;&gt;<br /> {{Internetquelle<br /> |autor=Tim Peters<br /> |url=http://legacy.python.org/dev/peps/pep-0020/<br /> |titel=The Zen of Python<br /> |hrsg=Python Software Foundation<br /> |datum=2004-08-19<br /> |sprache=en<br /> |abruf=2014-08-12}}<br /> &lt;/ref&gt;<br /> &lt;/references&gt;<br /> <br /> {{Gesprochene Version<br /> |datei=Python (Programmiersprache).ogg<br /> |länge=20.30 min<br /> |größe=13,0 MB<br /> |version=68824020<br /> |datum=5. Januar 2010<br /> }}<br /> {{Lesenswert|23. Oktober 2005|10220285}}<br /> <br /> {{Normdaten|TYP=s|GND=4434275-5|LCCN=sh96008834}}<br /> <br /> [[Kategorie:Python (Programmiersprache)| ]]<br /> [[Kategorie:Skriptsprache]]<br /> [[Kategorie:Objektorientierte Programmiersprache]]<br /> [[Kategorie:Imperative Programmiersprache]]<br /> [[Kategorie:Funktionale Programmiersprache]]</div> CommunityEditorSS