Dies ist ein als lesenswert ausgezeichneter Artikel.

Python (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 23. Oktober 2005 um 16:47 Uhr durch AF666 (Diskussion | Beiträge) (→‎Weblinks). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen
Python

Datei:PythonHi.PNG
Skriptsprache
Basisdaten

Entwickler Guido van Rossum
Erscheinungsjahr 20. Februar 1991[1]
Aktuelle Version 2.4.2
(28. September 2005)
Betriebssystem Windows, Linux, Mac OS X, u.v.m.
Programmiersprache Python[2], C[3]
Kategorie Skriptsprache
Lizenz Python license
deutschsprachig nein
www.python.org

Python [ˈpaɪθn̩] ist eine objektorientierte Programmiersprache. Sie wurde Anfang der 1990er Jahre von Guido van Rossum am Centrum voor Wiskunde en Informatica in Amsterdam entwickelt, ursprünglich für das verteilte Betriebssystem Amoeba. Alle bisherigen Implementierungen der Sprache (siehe auch Jython) übersetzen den Text eines Python-Programmes transparent in einen Zwischencode, der dann von einem Interpreter ausgeführt wird.

Den Namen erhielt die Sprache nach der englischen Comedy-Truppe Monty Python.

Ziele

Python wurde mit dem Ziel entworfen, möglichst einfach und übersichtlich zu sein. Dies wird durch zwei Dinge erreicht: Zum einen enthält die Sprache einen sehr mächtigen Funktionsumfang in nur wenigen Schlüsselwörtern, zum anderen wurde die grammatische Syntax reduziert und auf Übersichtlichkeit optimiert. Dies führt dazu, dass Python eine Sprache ist, in der man schnell, einfach und leicht programmieren kann. Sie ist daher besonders da geeignet, wo Übersichtlichkeit und Lesbarkeit des Codes eine herausragende Rolle spielen – z. B. in der Teamarbeit, wenn man sich Code nach längerer Zeit wieder anschaut, oder bei Anfängern des Programmierens.

Durch die Möglichkeit, Programme auch anderer Sprachen als Modul einzubetten, werden viele Nischen in der Programmierung abgedeckt. Bei Bedarf lassen sich schnellere Routinen maschinennah programmieren, oder Python kann als Skriptsprache eines anderen Programmes dienen (Beispiele: OpenOffice, Blender und Gimp).

Python ist eine Sprache, die den Programmierer nicht zu einem einzigen bestimmten Programmierstil zwingt, unterstützt werden sowohl objektorientierte und strukturierte als auch funktionale Programmierung. Die Datentypen werden dynamisch verwaltet; eine statische Typprüfung (wie z. B. bei C++) gibt es nicht. Die Freigabe nicht mehr benutzter Speicherbereiche erfolgt automatisch durch Garbage-Collection.

Obwohl Python als „Skriptsprache“ die Einfachheit betont, sind damit eine Reihe großer Softwareprojekte bewältigt worden. Ein Beispiel ist der Application-Server Zope sowie das Dateisystem Mojo Nation. Auch Teile von Google wurden mit Python programmiert. Auch Programme, wie der offizielle BitTorrent-Klient, machen von dieser Programmiersprache gebrauch.

Datentypen und Strukturen

Python besitzt eine größere Anzahl von grundlegenden Datentypen. Neben der herkömmlichen Ganzzahl- und Gleitkommaarithmetik unterstützt es transparent auch beliebig große Ganzzahlen und komplexe Zahlen.

Es verfügt über den üblichen Zierrat an Zeichenkettenoperationen, allerdings mit einer Besonderheit: Zeichenketten sind in Python unveränderliche Objekte. Damit führen Operationen, die das Ändern einer Zeichenkette bewerkstelligen sollen – wie z. B. die Ersetzung von Zeichen – dazu, dass stattdessen eine neue Zeichenkette zurückgegeben wird.

In Python ist der Datentyp an das Objekt (den Wert) gebunden und nicht an eine Variable, d. h. Datentypen werden dynamisch vergeben, so wie bei LISP – und nicht wie bei Java. Alle Werte werden per Referenz übergeben. In Python ist (fast) alles ein Objekt; Klassen, Typen, Methoden, Module etc.

Trotz der dynamischen Typverwaltung enthält Python eine gewisse Typprüfung. Diese ist strenger als bei Perl, aber weniger strikt als bei Objective CAML. Implizite Umwandlungen sind für numerische Typen definiert, so dass man beispielsweise eine komplexe Zahl mit einer langen Ganzzahl ohne explizite Typumwandlung multiplizieren kann. Anders als bei Perl gibt es allerdings keine implizite Umwandlung zwischen Zahlen und Zeichenketten; in Operationen für Zeichenketten kann also anstelle einer Zeichenkette nicht direkt eine Zahl verwendet werden.

Sammeltypen

Python besitzt mehrere Sammeltypen, darunter Listen, Tupel, Mengen (Sets) und Wörterbücher (Dictionaries). Listen, Tupel und Zeichenketten sind Folgen (Sequenzen) und kennen fast alle die gleichen Methoden: Über die Zeichen einer Kette kann man ebenso iterieren wie über die Elemente einer Liste. Listen sind erweiterbare Felder (Arrays), wohingegen Tupel eine feste Länge haben und unveränderbar sind.

Der Zweck solcher Unveränderbarkeit hängt mit den Wörterbüchern zusammen, ein Datentyp, der auch als Hashtabelle oder assoziatives Array bezeichnet wird. Um auch unter den Bedingungen der Übergabe per Referenz die Datenkonsistenz zu sichern, müssen die Schlüssel eines Wörterbuches vom Typ „unveränderbar“ sein. Die ins Wörterbuch eingetragenen Werte können dagegen von beliebigem Typ sein.

Sets sind einfach Mengen von Objekten und in cPython ab Version 2.4 im Standardsprachumfang enthalten. cPython ist der in der Programmiersprache C implementierte Python-Interpreter. Diese Datenstruktur kann beliebige (paarweise unterschiedliche) Objekte aufnehmen und stellt Mengenoperationen wie beispielsweise Durchschnitt, Differenz, Vereinigung zur Verfügung.

Objektsystem

Das Typsystem von Python ist auf das Klassensystem abgestimmt. Obwohl die eingebauten Datentypen genau genommen nicht eigentlich Klassen sind, können Klassen von einem Typ erben. So kann man die Eigenschaften von Zeichenketten oder Wörterbüchern erweitern – und sogar auch von Ganzzahlen, falls man das möchte. Python unterstützt auch Mehrfachvererbung.

Die Sprache unterstützt direkt den Umgang mit Typen und Klassen. Typen können ausgelesen (ermittelt) und verglichen werden und verhalten sich wie Objekte – in Wirklichkeit sind die Typen (wie in Smalltalk) selbst ein Typ. Die Attribute eines Objektes können als Wörterbuch extrahiert werden.

Syntax

Python wurde so entworfen, dass es gut lesbar ist. Die Anweisungen benutzen häufig englische Schlüsselwörter, wo andere Sprachen Interpunktionszeichen verwenden. Darüber hinaus besitzt Python spürbar weniger syntaktische Konstruktionen als viele strukturierte Sprachen wie C, Perl oder Pascal. Z. B. kennt Python nur zwei Schleifenformen – for zur Iteration über die Elemente einer Liste und while zur Wiederholung einer Schleife so lange, wie ein logischer Ausdruck wahr ist. Es hat also weder das verwickelte for oder das do...while von C, noch Perls until, obwohl die entsprechenden Äquivalente natürlich ausgedrückt werden können. Ebenso hat es für Verzweigungen auch nur die Konstruktion if...elif...else und kein switch oder goto zu Sprungzielen. Der ternäre Operator (x ? y : z) fehlt ebenfalls.

Strukturierung durch Einrücken

Python benutzt Einrückungen als Strukturierungselement. Hierin unterscheidet es sich von den meisten anderen Programmiersprachen, bei denen Blöcke durch Klammern oder Schlüsselworte markiert werden und im Gegenzug Leerräume keine 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.

Programmierer, die bereits andere Programmiersprachen kennen, fühlen sich mitunter durch diese Vorschrift in ihrer Freiheit eingeschränkt. Für Programmierneulinge ist dieser Zwang zu lesbarem Stil eher von Vorteil.

Ein kurzes Beispiel macht das schnell klar. Hier sind Funktionen in C und in Python, die das gleiche tun – die Fakultät einer Ganzzahl berechnen.

Fakultätsfunktion in C (ohne Einrückung, unleserlich):

int factorial(int x){ if(x == 0){ return 1; } else{ return x * factorial(x - 1); } }


Fakultätsfunktion in C (mit Einrückung):

int factorial(int x){
    if(x == 0){
        return 1;
    }
    else{
        return x * factorial(x - 1);
    }
}

Jetzt die gleiche Funktion in Python:

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

Man sollte jedoch darauf achten, die Einrückungen im gesamten Programmtext gleich zu gestalten. Die gemischte Verwendung von Leerzeichen und Tabulatorzeichen kann zu Einrückungen führen, die nicht der Blockstruktur entsprechen. Der Python-Interpreter geht davon aus, dass ein Tabulator-Zeichen genau acht Leerzeichen entspricht, auch wenn der Editor einen Tabulator in der Breite von z. B. vier einfachen Leerzeichen darstellt.

Funktionales Programmieren

Erwähnt wurde bereits, dass Python auch über ausdrucksstarke syntaktische Elemente zur funktionalen Programmierung verfügt. Diese vereinfachen das Arbeiten mit Listen und anderen Sammeltypen. Eine solche Vereinfachung ist die Listennotation, die aus der funktionalen Programmiersprache Haskell stammt; hier bei der Berechnung der ersten fünf Zweierpotenzen:

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

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

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

def add_and_print_maker(x):
    def temp(y):
        print "%d + %d = %d" % (x, y, x+y)
    return temp

Ausnahmebehandlung

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

Ausnahmen erlauben einen bündigeren Fehlertest mit mehr Sicherheit als viele andere Verfahren, mit denen man Fehler oder Ausnahmezustände mitteilen kann. Ausnahmen sind Thread-sicher, sie führen nicht dazu, den Code durch den Test von Rückgabewerten zu verunstalten, wie das in C geschieht; und sie können sich leicht entlang der Aufruffolge hangeln, falls ein Fehler an eine höhere Programmebene gemeldet werden soll.

Der Python-Stil ermutigt zum Einsatz von Ausnahmen, wann immer eine Fehlerbedingung entstehen könnte. Es ist tatsächlich so, dass es in Python z.B. anstelle eines vorherigen Dateitestes auf Beschreibbarkeit üblich ist, die Schreibfunktion einfach auszuprobieren und eine eventuelle Ausnahme abzufangen - falls der Zugriff verwehrt wird.

Außerdem nützlich ist dieses Prinzip bei der Konstruktion benutzersicherer Eingabeaufforderungen:

while True:
  try:
    num = raw_input("Eine Zahl eingeben: ")
    num = int(num)
    break
  except ValueError:
    print "Eine _Zahl_, bitte!"

Dieser Code wird den Benutzer so lange nach einer Nummer fragen, bis dieser einen String eingibt, der sich per int() in eine Ganzzahl konvertieren lässt, ohne dass ein Fehler auftritt.

Ebenso löst beispielsweise auch das Interrupt-Signal (SIGINT, häufig Strg+C) eine Exception aus, die einfach gefangen und behandelt werden kann (except KeyboardInterrupt: …).

Standardbibliothek

Bei Python sind die "Batterien inbegriffen"

Python verfügt über eine große Standardbibliothek, wodurch es sich für viele Anwendungen gut eignet. Das liegt an der sogenannten „batteries included“-Philosophie der Python-Module. Die Module der Standardbibliothek können mit in C oder Python selbst geschriebenen Modulen ergänzt werden. Die Standardbibliothek ist besonders auf Internet-Anwendungen zugeschnitten, mit der Unterstützung einer großen Anzahl von Standardformaten und -Protokollen (wie Multipurpose Internet Mail Extensions und HTTP). Module zur Schaffung grafischer Schnittstellen, zur Verbindung mit relationalen Datenbanken und zur Manipulation regulärer Ausdrücke sind ebenfalls enthalten.

Die Standardbibliothek ist eine der größten Stärken von Python. Das meiste davon ist plattformunabhängig, so dass auch größere Python-Programme oft auf Unix, Windows, Macintosh und anderen Plattformen ohne Änderung laufen.

Mit Hilfe des mitgelieferten Moduls Tkinter kann in Python (wie in Perl und Tcl) schnell eine grafische Oberfläche (GUI) mit Tk erzeugt werden. Es gibt eine Vielzahl anderer GUI-Bibliotheken, z. B. PyGtk, PySWT, PyQt und wxPython.

Sonstiges

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

Python ist für die meisten gängigen Betriebssysteme frei erhältlich und ist eine der drei Sprachen, die häufig in einer LAMP-Umgebung eingesetzt werden. Um Python in den Webserver einzubinden, wurde mod_python entwickelt, das die Ausführung im Vergleich zu CGI wesentlich beschleunigt und persistente Daten speichern kann. Mittlerweile gibt es auch eine Python-Implementierung für die .NET- bzw. Mono-Plattform.

Siehe auch

Literatur

Weblinks

Vorlage:Wikibooks1

  1. History and License - Python documentation. (abgerufen am 19. August 2016).
  2. The python Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 19. Juli 2018).
  3. The Python Programming Language Source Code. In: GitHub. (abgerufen am 3. Februar 2019).