Technologien zur Web-Programmierung - Python

Werbung
Stefan Uhr
Web-Programmierung mit Python
Proseminar Webtechnologien
SoSe 2005
Technologien zur Web-Programmierung - Python
von Stefan Uhr
Matrikel-Nr. 688435
Angewandte Informatik - Elektrotechnik
Zusammenfassung
Diese Ausarbeitung über Technologien zur Web-Programmierung soll in die Sprache Python
einführen. Hierbei wird ein besonderes Augenmerk auf das Konzept und die Architektur von
Python gelegt. Außerdem wird Python mit den Sprachen PHP und Java verglichen. Zum Schluss
wird aus den Ausführungen ein Fazit gezogen.
1
Stefan Uhr
Web-Programmierung mit Python
Inhalt
1 Einführung in Python
1.1
1.2
1.3
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
Was ist Python?
Die Entwicklung von Python
Eigenschaften von Python
Objektorientierte Sprache
Skriptsprache
Interpretierte Sprache
Plattformunabhängigkeit
Verfügbarkeit
2 Konzept und Architektur
2.1
2.1.1
2.1.2
2.1.3
2.1.4
2.2
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
Konzept und Ziele von Python
Einfache und übersichtliche Syntax
Erweiterbarkeit durch Module
Mächtigkeit durch umfangreiche Bibliotheken
Unterstützung von verschiedenen Programmierformen
Die Architektur von Python
Dynamische Vergabe von Datentypen
Formatierung durch Einrückung
Elementare Datentypen
Klassen und Methoden
Vererbung
Ausnahmebehandlung
Speicherbereinigung
3 Anwendungsbereiche
3.1
3.2
3.3
3.4
3.5
Web-Applikationen mit Zope
Internet-Protokolle
Datenbanken
Mathematik und Statistik
GUI-Programmierung
4 Vergleich mit PHP und Java
5 Zusammenfassung
2
Stefan Uhr
Web-Programmierung mit Python
1 Einführung in Python
1.1 Was ist Python?
Python ist eine interpretierte, objektorientierte Programmiersprache. Sie wird häufig als
Skriptsprache für Webanwendungen eingesetzt. Python ist Open-Source Software und kann unter
verschiedenen Plattformen eingesetzt werden. Alle bisherigen Implementierungen der Sprache
übersetzen den Quelltext eine Python-Programmes in einen Zwischencode, auch Bytecode genannt,
der dann von einem Interpreter ausgeführt wird. Python kombiniert Mächtigkeit mit einer sehr
klaren, einfachen Syntax und kann systematisch durch Module erweitert werden, welche entweder
in Python selbst oder aber auch in einer kompilierten Sprache wie C oder C++ geschrieben werden
können [1].
1.2 Die Entwicklung von Python
Python wurde Anfang der neunziger Jahre von Guido van Rossum in den Niederlanden entwickelt,
als dieser eine Testumgebung für ein Betriebssystem brauchte, an dem er gerade arbeitete.
Ironischer weise erinnert sich heute kaum noch jemand an dieses Betriebssystem namens Amoeba.
Die quasi als Nebenprodukt entwickelte Programmiersprache Python erfreut sich jedoch heute
zunehmender Beliebtheit. Der Name "Python" stammt übrigens von der englischen Comedy-Truppe
"Monty-Python". Trotzdem wird als Symbol meist die bekannte Schlange verwendet, dies ist jedoch
nicht offiziell. Python liegt aktuell in der Version 2.4.1 vom 30. März 2005 vor.
1.3 Eigenschaften von Python
Die sogenannten High-Level-Sprachen der vierten Generation, zu denen auch Python zählt, gelten
als leicht erlernbar und bieten Ausnahmebehandlung, Fehlerverfolgung und Speicherverwaltung.
1.3.1 Objektorientierte Sprache
Python wurde von Anfang an als objektorientierte Sprache entwickelt. Objektorientierung bedeutet
grob gesagt, dass der Programmcode nicht hierarchisch (sequenziell) von oben nach unten
abgearbeitet wird, sondern sich Teile des Programms in Klassen zusammenfassen lassen. Man
definiert also für eine sich öfter wiederholende Funktion eine Klasse, die diese ausführt. In Python
ist eine Klassendefinition jedoch nicht zwingend vorgeschrieben, wie dies beispielsweise in Java
der Fall ist. Man kann also in Python auch prozedural programmieren.
1.3.2 Skriptsprache
Python ist zwar nicht als reine Skriptsprache entwickelt worden, es eignet sich jedoch aufgrund
seines modularen Aufbaus und der einfachen Syntax sehr gut als solche. Doch was genau sind
Skriptsprachen? Historisch gesehen entstanden Skriptsprachen aus einfachen ShellProgrammiersprachen wie sh und awk. Skripte ermöglichen Steueranweisungen zur
3
Stefan Uhr
Web-Programmierung mit Python
Automatisierung unterschiedlichster Aufgaben wie beispielsweise Systemverwaltung sowie
Konfiguration und Erstellung von benutzerdefinierten Abrufen [2, S.12]. Vor allem im Bereich der
Web-Anwendungen finden Skripte Verwendung. Hier hat sich Python in den letzten Jahren als
zuverlässige, flexible Sprache behaupten können.
1.3.3 Interpretierte Sprache
Interpretierte Sprachen wie Python werden im Gegensatz zu den kompilierten Sprachen nicht in
reinen Maschinencode übersetzt, sondern von einem speziellen Programm - einem sog. Interpreter
gelesen und ausgeführt. Ein großer Nachteil ist dabei die Geschwindigkeit. Kompilierte Programme
laufen in der Regel viel schneller, da sie nicht mehr Zeile für Zeile interpretiert werden müssen.
Eine interpretierte Sprache bringt jedoch auch viele Vorteile mit sich. So kann auf das
zeitaufwändige Kompilieren verzichtet werden, was inbesondere bei großen Programmen sehr
lange dauert. Außerdem ergibt sich die Möglichkeit Fehlerprüfungen zur Laufzeit durchzuführen.
Dies beschleunigt die Entwicklung meist erheblich.
1.3.4 Plattformunabhängigkeit
Als weiterer Vorteil der Interpretersprachen gilt die Plattformunabhängigkeit. Weil der
Programmcode nicht für eine spezielle Umgebung übersetzt wurde, kann man das Programm auf
eine beliebige andere Plattform transferieren, einen vorhandenen Interpreter vorausgesetzt.
Interpreter für Python gibt es für beinahe jedes Betriebssystem, vor allem natürlich für die
wichtigsten, nämlich Windows, Linux/Unix und Mac OS. Mittlerweile existiert sogar eine Version
für einige PDAs.
1.3.5 Verfügbarkeit
Python ist, wie bereits erwähnt, für verschiedene Plattformen verfügbar. Bei Linux-Systemen ist es
meist vorinstalliert, unter Windows muss man es zunächst herunterladen. Ein wichtiger Aspekt ist
die Lizenz unter der Python steht. Dies ist die sog. "Python Licence", eine Open-Source Lizenz
ähnlich der bekannten GPL. Damit ist gewährleistet, dass jeder Python einsetzen kann wo er will
und das Recht hat, die Sprache beliebig zu erweitern. Auch fallen keine Lizenzkosten an.
In der Grundausstattung liefert Python einen Interpreter für die Kommandozeile mit - den selbst in
Python geschriebenen Editor IDLE (Integrated DeveLopment Environment). Darüber hinaus gibt
es viele Editoren, die Syntax-Highlighting für Python beherrschen, sowie einige Umgebungen mit
erweiterten Fähigkeiten, die für die Entwicklung mit Python benutzt werden können. Die meisten
davon sind kostenlos (Freeware).
Hier nun eine kleine Übersicht, die keinerlei Anspruch auf Vollständigkeit erhebt:
4
Stefan Uhr
Web-Programmierung mit Python
Editoren
SciTE
UltraEdit
Emacs
Nedit
IDEs
Jedit
PyPE
DrPython
Eric3
SPE
Boa Constructor
PythonWin
Wing
Linux
X
X
X
Linux
X
X
X
X
X
X
Windows
X
X
MacOS
Windows
X
X
MacOS
X
X
X
X
X
X
X
X
X
X
Freeware
X
X
X
Freeware
X
X
X
X
X
X
X
Tabelle1: IDE's für Python
2 Konzept und Architektur
2.1 Konzept und Ziele von Python
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 [1].
"Nichts an Python ist grundsätzlich neu. Das Geniale liegt in einer gelungenen Auswahl von Ideen,
die aus zum Teil weit außerhalb des Mainstream verlaufenden Entwicklungen stammen." [3]
2.1.1 Einfache und übersichtliche Syntax
Python wurde von Anfang an bewusst mit einer sehr einfachen und damit übersichtlichen Syntax
entworfen. Damit ist es besonders für Anfänger in der Programmierung geeignet. Beispielsweise
wird auf Klammern zur Abgrenzung von Blöcken verzichtet. Ebenso entfallen Zeichen am Ende
von Anweisungen wie z.B. das Semikolon. Darüber hinaus besitzt Python spürbar weniger
syntaktische Konstruktionen als viele strukturierte Sprachen wie C, Perl oder Pascal. Es kennt z.B.
nur zwei Schleifenformen. Dadurch werden viele Programmierfehler bereits von Anfang an
ausgeschlossen.
5
Stefan Uhr
Web-Programmierung mit Python
2.1.2 Erweiterbarkeit durch Module
Skriptsprachen arbeiten modular, Programme können in einzelne Teilmodule zerlegt werden.
Bibliotheken bieten Modulsammlungen für häufig wiederkehrende Aufgaben [2, S.13]. Die Sprache
Python wird mit einer Menge von Modulen geliefert, die Python-Programmierern einen großen
Funktionsumfang bereitstellen. Jedes Modul ist eine Sammlung von Python-Funktionen, Daten und
Klassen zu einem bestimmten Zweck, wie beispielsweise mathematische Berechnungen oder
reguläre Ausdrücke [4]. Einige Module sind als Standard-Module fest eingebaut. Weitere kann man
mit dem Befehl import einbinden. Es besteht auch die Möglichkeit selbst Module zu erstellen und
diese zu verwenden. Damit ist Python hochgradig flexibel und lässt sich sehr gut auf die
entsprechenden Bedürfnisse anpassen.
2.1.3 Mächtigkeit durch umfangreiche Bibliotheken
Die von Python verwendeten Module werden in einer Bibliothek gespeichert. Python verfügt bereits
über eine umfangreiche Standardbibliothek, in der Module für alle wichtigen Funktionen bis hin zur
GUI-Programmierung vorhanden sind. Dies liegt an der sogenannten „batteries-included“
-Philosophie von Python. Damit ist gemeint, dass man die Batterien, also die benötigten Module,
mitliefert, um sofort mit sinnvollen Programmieraufgaben beginnen zu können. Die Bibliothek
kann, wie bereits erwähnt, mit anderen Modulen erweitert werden, die nicht zum Standard-Umfang
gehören. Diese Module können wahlweise in C oder Python selbst geschrieben sein [1]. Durch
seine große Bibliothek ist Python eine sehr mächtige und vielseitig verwendbare Sprache.
2.1.4 Unterstützung von verschiedenen Programmierformen
Um die typische erste Übung eines jeden Programmier-Kurses zu absolvieren, nämlich ein
Programm zu schreiben, welches "Hello World" auf dem Bildschirm ausgibt, bedarf es bei Python
keiner großen Anstrengung, denn dies ist denkbar einfach:
print "Hello World"
Dieses Beispiel zeigt, dass es in Python nicht zwingend notwendig ist, eine Klasse zu erzeugen;
man kann stattdessen auch funktional programmieren. In Java sähe ein Programm mit dem selben
Ergebnis wesentlich komplizierter aus, vom Zeitaufwand einmal abgesehen:
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
Natürlich könnte man das Programm "Hello World" in Python ebenfalls objektorientiert realisieren,
man wird jedoch nicht dazu gezwungen. Ob man dies eher als Vorteil oder als Nachteil sieht, ist
jedem Programmierer selbst überlassen.
6
Stefan Uhr
2.2
Web-Programmierung mit Python
Die Architektur von Python
Im folgenden Abschnitt wird die grundlegende Architektur von Python kurz vorgestellt. Bei Python
sind einige Dinge anders gelöst als bei anderen bekannten Programmiersprachen. Diese
Besonderheiten sollte man kennen.
2.2.1 Dynamische Vergabe von Datentypen
In Python ist eine Zuweisung der Form
Alter = 24
kein Problem. Es muss kein expliziter Datentyp angegeben werden. Die Sprache weist dem Wert
selbst einen passenden Datentyp zu. Der Datentyp ist an den Wert gebunden und nicht an eine
Variable, d.h. Datentypen werden dynamisch vergeben. Auch eine Typumwandlung findet
automatisch statt. Addiert man beispielsweise zwei Zahlen mit unterschiedlichen Datentypen, so
wird dem Ergebnis einfach der in der Rangfolge der Sprache festgelegte, höherwertigere Typ
zugewiesen. Dieser Automatismus vereinfacht das Programmieren meist erheblich.
2.2.2 Strukturierung durch Einrückung
In Python werden zusammengehörige Anweisungen (Blöcke) nicht durch Klammern begrenzt,
sondern durch Einrückung. Die Regel ist dabei denkbar einfach: alle nachfolgenden Zeilen, die
tiefer eingerückt sind als die Kopfzeile gehören zum selben Block. Dabei muss die Einrücktiefe der
Zeilen natürlich gleich sein. Dies begrenzt auch die Gültigkeit der in diesem Block verwendeten
Namen. Durch diese strikte Einrückung zur Blockbildung bekommt man auch quasi automatisch ein
schönes und übersichtliches Layout. Vor allem Anfänger tun sich hiermit oft leichter als mit
undurchsichtigen Formatierungsregeln.
Eine weitere Regel besagt, dass eine Anweisung immer mit dem Zeilenende endet. Daher braucht es
kein spezielles Zeichen, wie etwa ein Semikolon um dem Interpreter das Ende der Anweisung
mitzuteilen. Immer wenn zu einer Anweisung eine Folge von Anweisungen gehört (z.B. bei einer
Schleife), so endet diese Anweisung mit einem Doppelpunkt.
2.2.3 Elementare Datentypen
In Python gibt es drei Sammelgruppen von Datentypen. Diese werden weiter unterteilt.
Skalare
Skalare haben als Untertypen alle Zahl-Typen. Zahlen werden unterteilt in ganze Zahlen (integer),
Gleitkommazahlen (floating point numbers), beliebig große ganze Zahlen (large integers) und
komplexe Zahlen (complex numbers) [5, S.41].
Ganze Zahlen sind meist 32-Bit Zahle, während große ganze Zahlen nahezu beliebig groß sein
dürfen. Gleitkommazahlen entsprechen dem Datentyp double aus C. Komplexe Zahlen wurden erst
7
Stefan Uhr
Web-Programmierung mit Python
nach längerer Diskussion als elementarer Datentyp eingeführt. Beispiele:
zahl = 34
komma = 4.567
komplex = (4-5j)
Sequenzen
Sequenz ist ein Sammelbegriff für Datentypen, die aus linear geordneten Elementen bestehen und
auf die in identischer Weise zugegriffen wird. Hierzu zählen Texte, Tupel und Listen, wobei Texte
wiederum nur ein Oberbegriff für die beiden Datentypen string und unicode ist. Diese Datentypen
werden auch deshalb unter dem Oberbegriff Sequenz zusammengefasst, weil sie fast alle die
gleichen Methoden kennen. Beispielsweise kann man sowohl über die Zeichen einer Zeichenkette
(string) als auch über die Elemente einer Liste iterieren [1].
Python unterscheidet nicht zwischen Zeichen und Zeichenketten, jedes einzelne Zeichen ist eine
Zeichenkette. Zeichenketten werden durch einfache oder doppelte Anführungszeichen eingefasst,
das jeweils andere Zeichen darf innerhalb des Strings verwendet werden [2, S.46]:
S1 = " Monty sagt ’Hallo’. "
S2 = ’ Monty sagt "Hallo". ’
Tupel sind Gruppierungen beliebiger Objekte zu einer festen, unveränderbaren Einheit. Sie
kommen immer dann zum Einsatz, wenn ein Paar oder eine konstante Menge von Objekten
gemeinsam verwaltet oder als Parameter übergeben wird. Häufigstes Einsatzgebiet sind Vektoren
und Positionsangaben [2, S.50]. Tupel sind nicht veränderbar.
Wörterbücher
Hier gibt es bei Python nur eine Form, nämlich die sog. assoziativen Feldern (dictionaries).
Wörterbücher sind veränderbare Folgen von Objekten. Sie werden über einen Schlüssel
angesprochen. Als Schlüssel können beliebige Objekte verwendet werden außer veränderbaren
Folgen und Dictonaries. Ein Dictionary ist also eine Menge von Schlüssel-Wert-Paaren. Es wird in
geschweiften Klammern notiert; über die Schlüssel wird auf die Werte zugegriffen. Zwischen
Schlüssel und Wert steht ein Doppelpunkt; die Paare werden durch Kommata getrennt.
D = { 1: 'Hello', 2: 'World'}
Die Wörterbücher sind mit den Hash-Tabels aus Java vergleichbar.
2.2.4 Klassen und Methoden
Klassen werden in Python mit dem Schlüsselwort class gefolgt von einem frei wählbaren Namen
und einem Doppelpunkt definiert. Anschließend folgt in der nächsten Zeile eingerückt die
eigentliche Definition. Der Konstruktor __init__ (man beachte die Unterstriche) erzeugt eine neue
Instanz. Die Verbindung von Objektinstanz und Klasse geschieht dabei implizit.
8
Stefan Uhr
Web-Programmierung mit Python
Die Methoden sind Funktionen der Klasse, sie werden mit Hilfe des Schlüsselwortes def definiert.
Methoden haben mindestens einen Parameter, dies ist das Objekt selbst. Meistens wird dieser
Parameter self genannt, es kann natürlich auch ein anderer Name gewählt werden. Die Parameter
werden in runden Klammern durch Kommata getrennt angegeben. Ein Destruktor findet selten
Verwendung, da er aufgrund der in Python eingebauten Speicherbereinigung meist unnötig ist.
Sollte er doch einmal gebraucht werden, kann man ihn mit def __del__ erzeugen.
Python ist objektorientiert, doch gibt es keine alle Typen umfassende Klassenhierarchie. Alle Daten
und Programmkomponenten sind Objekte, ohne notwendigerweise einer Klasse angehören zu
müssen. Auch ganz unterschiedliche Typen können sich konform verhalten und die selben
Funktionen gewährleisten. Die Objekte sind also nicht klassenzugehörig. Innerhalb der Methoden
ist der Zugriff auf Klassenattribute (zu denen auch die Methoden gehören) nur durch Qualifikation
mit dem Klassennamen, auf Attribute der Klassenausprägungen (Instanzen) nur durch Qualifikation
mit dem self-Parameter möglich [3].
2.2.5 Vererbung
Eine Klasse kann ihre Eigenschaften und Methoden an eine andere Klasse vererben. Dieser
Mechanismus wird in der Objektorientierung häufig angewandt. Wird eine Klasse von einer
anderen abgeleitet, so wird der Name der Basisklasse in Klammern hinter dem Namen der
abgeleiteten Klasse angegeben. Eine Methode der Basisklasse kann in einer abgeleiteten Klasse
überschrieben werden. Die aufgerufene Methode wird zunächst in der Klasse des Objektes gesucht.
Wenn sie dort nicht vorhanden ist, wird die Suche in der zugehörigen Basisklasse fortgesetzt. Eine
abgeleitete Klasse kann wiederum die Basisklasse für eine weitere Klasse sein. Dadurch ergibt sich
eine Vererbung über mehrere Ebenen. Eine Klasse kann außerdem von mehreren Basisklassen
abgeleitet sein. Damit ist in Python eine Mehrfachvererbung ausdrücklich erlaubt.
2.2.6 Ausnahmebehandlung
Python unterstützt (und nutzt ausgiebig) die Ausnahmebehandlung (Exception Handling) als ein
Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass es sogar möglich
ist, Syntaxfehler abzufangen und zur Laufzeit zu behandeln. Wenn das System einen Fehler
feststellt, wird eine Ausnahme generiert. Nun wird nach der Behandlung der Ausnahme gesucht.
Rechnet man in einem Programmstück mit einer Ausnahme, kann man dieses Stück in einen tryexcept-Block einschließen. In Python gibt es drei Arten von Ausnahmen: Strings, Klassen und
Instanzen. Die Suche nach der richtigen Behandlung hängt vom Ausnahmetyp ab. Falls die
Ausnahmen Klassen oder Klasseninstanzen sind, berücksichtigt die Suche auch die
Vererbungshierarchie [5, S.34 ff].
2.2.7 Speicherbereinigung
Die Speicherbereinigung (Garbage Collection) ist bei Python ebenso wie bei Java weitgehend
automatisiert. Dies bedeutet, dass sich der Programmierer im Normalfall keine Gedanken über nicht
mehr benötigte Attribute und Objekte machen muss. Ohne dass der Programmierer etwas davon
merkt, wird regelmäßig eine Speicherbereinigung durchgeführt.
9
Stefan Uhr
Web-Programmierung mit Python
"Die Speicherverwaltung arbeitet verglichen mit Java schnell und macht sich auch bei
speicherintensiven Anwendungen nicht durch lange Programmpausen, wie sie etwa in Java oft zu
beobachten sind, bemerkbar." [2, S.93]
3 Anwendungsbereiche
Python kann dank seiner o.g. Funktionen und Leistungsmerkmale in vielen Bereichen eingesetzt
werden. Eine der bekanntesten Anwendungen dürfte der vollständig in Python geschriebene
Webanwendungsserver (Application Server) Zope sein. Aber es gibt noch vielfältige weitere
Anwendungsgebiete.
3.1 Web-Applikationen mit Zope
Zope stellt eine Plattform für die Realisierung von Internetanwendungen dar und eignet sich sehr
gut zum Erstellen von dynamischen Webauftritten, da es prinzipiell darauf ausgerichtet ist, den
Inhalt von der Gestaltung der Website zu trennen. Leistungsmerkmale von Zope sind unter anderem
die Erweiterbarkeit durch sog. Produkte, eine Objekt-Datenbank für dynamisch-veränderliche
Inhalte, die Integration verschiedener Entwicklungssprachen, ein ausgefeiltes SicherheitsFramework, der eigene Webserver Zserver, welcher auch hinter einem Apache-Webserver betrieben
werden kann, sowie die Multithreading-Fähigkeiten [7].
Bekannte Anwender von Zope sind die Wochenzeitung "Die Zeit", die US Navy, die NATO, die
Volkswagen AG, Lufthansa sowie mehrere Universitäten. In Kombination mit dem ContentManagement-System Plone steht dem Anwender eine erstklassige Applikation zur Verfügung.
3.2 Internet-Protokolle
Die schnelle und einfache Entwicklung von Speziallösungen für Netzwerk- und Internetanwendungen ist heute ein wichtiges Einsatzgebiet von Skriptsprachen. Noch ist Perl die derzeit meist
eingesetzte Sprache, jedoch entdecken immer mehr Entwickler die von Python gebotenen
Möglichkeiten. Python besitzt eine breite Unterstützung für die folgenden Internet-Protokolle:
•
•
•
•
•
•
•
•
•
TCP / IP
FTP
NNTP
HTTP
E-Mail (POP, SMTP, IMAP)
Parser für HTML, MIME, E-Mail
SGML- / XML-Verarbeitung
Kommunikation mit Webbrowsern
CGI-Entwicklung
10
Stefan Uhr
Web-Programmierung mit Python
3.3 Datenbanken
Zur Nutzung von Datenbanken steht dem Entwickler eine gute Auswahl an Bibliotheken zu
Verfügung. Es gibt zahlreiche Varianten an Schnittstellen zu einfachen Objektspeichern und
relationalen Datenbanken, wie MySQL, DBASE, Oracle oder Informix [2, S.79 f]. Die
Programmier-Schnittstelle ist von der Datenbank vorgegeben und muss lediglich an Python
angepasst werden. Aufgrund der sehr guten XML-Unterstützung, wird Python auch oft als
Bindeglied für die XML-Datenverarbeitung und Visualisierung eingesetzt.
Obwohl die Benutzung von relationalen Datenbanken zusammen mit Python nicht schwer ist, wäre
es manchmal schön, das ganze mehr objektorientiert zu gestalten und sich nicht mit Tabellen und
SQL beschäftigen zu müssen. Hier hilft PyORQ. Es ermöglicht das Speichern und Abfragen von
Python-Objekten in relationalen Datenbanken. Man kann mit Python-Ausdrücken Datenbanken
abfragen und braucht so kein SQL mehr zu verwenden. Momentan werden SQLite, MySQL und
PostgreSQL unterstützt.
3.4 Mathematik und Statistik
Für mathematische und statistische Aufgabenstellungen sind einige hundert freie Bibliotheken
vorhanden, beispielsweise stats für statistische Funktionen, disipy zur Visualisierung. Das Angebot
ist insgesamt sehr groß und deckt weite Bereiche der Mathematik, Physik, Chemie und weiterer
Naturwissenschaften ab. Ebenso sind Schnittstellen zu verbreiteten Programmen wie Mathematica
und Gnuplot erhältlich.
Einen besonderen Bekanntheitsgrad hat die Bibliothek numeric erlangt. Numeric ist in C
implementiert und erweitert Python um hocheffiziente Funktionen für Berechnungen an Feldern
und Matrizen. Damit läßt sich die Interaktivität und die elegante Syntax von Python mit der nötigen
Performance für umfangreiche mathematische Berechnungen kombinieren. Mit diesen Bibliotheken
wird im professionellen Umfeld gearbeitet, beispielsweise vom Fermilab [2, S.80].
3.5 GUI-Programmierung
Kaum ein kommerzielles Programm kommt heute ohne grafische Benutzeroberfläche aus. Python
bietet dem Entwickler viele Möglichkeiten, um ein Programm mit einer grafischen
Benutzeroberfläche auszustatten. Im Folgenden werden einige bekannte Bibliotheken kurz erläutert:
Tkinter
Tkinter ist das Standard GUI Toolkit, das bei Python mitgeliefert wird. Es ermöglicht GUI
Programme zu schreiben, die das Tk von Tcl benutzen.
wxPython
wxPython ist der Python Wrapper für wxWidgets. wxWidgets ist ein Framework, dass neben GUI
auch andere praktische Dinge kann.
11
Stefan Uhr
Web-Programmierung mit Python
PyQt
PyQt ist der Wrapper für Qt. Qt ist eine Grafikbibliothek, die vom KDE-Projekt verwendet wird.
4 Vergleich mit PHP und Java
Nun folgt ein Vergleich zwischen den Programmiersprachen Python, PHP und Java, wobei man
eigentlich an einigen Stellen mit Java-Script vergleichen muss.
4.1 Vergleich zwischen PHP, Java und Python
Die beiden Sprachen Java und Python wurden bereits von vorn herein als objektorientierte Sprachen
entworfen und sind deshalb sehr vielseitig einsetzbar. Bei PHP ist dies nicht der Fall. Es wurde
ursprünglich nur als Skriptsprache entwickelt und bekam erst mit der aktuellen Version 5.0
akzeptable, jedoch keinesfalls für die professionelle Programmierung ausreichende,
objektorientierte Implementierungen. Durch diese Einschränkung wird PHP fast ausschließlich als
Skriptsprache im Bereich der Web-Anwendungen eingesetzt.
PHP konnte sich durch seine vielfältigen Möglichkeiten und seine einfache und schnell erlernbare
Syntax sehr schnell verbreiten und genießt heute einen guten Ruf, wenn es um die Erstellung
dynamischer Webseiten geht. Die bekannte Abkürzung LAMP, bestehend aus den Komponenten
Linux (Betriebssystem), Apache (Webserver), MySQL (Datenbank) und PHP (Skriptsprache) zeigt
die große Akzeptanz vom PHP im Bereich der Web-Programmierung. Das P von LAMP wird
jedoch auch zunehmend mit Python übersetzt, da Python sich in den letzten Jahren ebenfalls stark
verbreitet hat.
Auch bei der Ausführung ergeben sich wichtige Unterschiede. So werden Java-Skripte und PythonSkripte auf dem Client, d.h. dem Rechner des Internet-Nutzers ausgeführt, während PHP auf dem
Server interpretiert wird. Dieses Verfahren hat Vor- und Nachteile. Bei einer Ausführung auf dem
Server hat man den Vorteil, dass die Seite bei jedem Benutzer, in Abhängigkeit vom verwendeten
Browser, gleich aussieht. Jedoch steigt gerade bei stark frequentierten Servern die Belastung an, da
das Skript bei jeder neuen Anfrage erneut ausgeführt werden muss. Diese Belastung fällt natürlich
bei einer Client-seitigen Ausführung weitgehend weg. Dadurch erhöht sich auch die
Geschwindigkeit. Außerdem ist zu beachten, dass bei einer clientseitigen Ausführung zusätzliche
Software (Interpreter) auf dem Rechner installiert sein muss.
PHP hat bislang keinen Applikations-Server. Das heißt, alle Variablen müssen bei jedem Aufruf
wieder neu geladen bzw. berechnet werden [8]. Python dagegen hat in der Kombination mit Zope
einen starken und leistungsfähigen Applikations-Server, der sich auch international bereits
durchgesetzt hat.
PHP und Python sind freie Software (Open-Source), während Java von Sun vermarktet wird. Da es
mehrere Java Compiler und Interpreter gibt, kommt es immer wieder zu Problemen mit der
Lauffähigkeit von Programmen. So warnt beispielsweise Richard Stallman, der Gründer der FSF
(Free Software Foundation) vor der Java-Falle. Wenn Entwickler nun Java-Programme schreiben
und dazu das SDK von Sun einsetzen, dann kann es leicht passieren, daß sie Features verwenden,
12
Stefan Uhr
Web-Programmierung mit Python
die in freien Implementierungen noch nicht existieren. Damit ist das Programm in der Java-Falle
gefangen. Es läßt sich nicht nutzen ohne die proprietäre Software von Sun.
Die Situation läßt sich verallgemeinern auf alle Programme, die von unfreien Komponenten
abhängen. So ist ein freies Programm, das unter Windows läuft, von geringem Nutzen für die
Anwender freier Betriebssysteme [9].
Die Sprachen PHP, Python und Java haben jedoch auch viele Gemeinsamkeiten. Alle drei Sprachen
sind plattformunabhängig und laufen auf nahezu jedem System. Sie gelten alle als leicht erlernbar
und besitzen eine einfache Syntax. Wobei ich subjektiv sagen würde, dass die Syntax von Python
noch um einiges leichter zu lernen ist als die von PHP oder Java.
Es gibt aber noch mehr Gemeinsamkeiten. Alle drei Sprachen sind interpretierte Sprachen, die von
einem Interpreter ausgewertet werden. Sie verfügen ebenfalls alle über eine große Bibliothek, wobei
die von Java die größte sein dürfte. Außerdem sind alle drei sehr gut dokumentiert und es finden
sich unzählige Seiten mit hilfreichen Anleitungen im Internet. Für Java, Python und PHP gibt es für
jede Plattform mehrere Entwicklungsumgebungen, die dem Programmierer die Arbeit erleichtern.
5 Zusammenfassung
Bei der Beschäftigung mit der Programmiersprache Python kommt man zu dem Schluss, dass dies
eine sehr ausgereifte, durchdachte Sprache ist, die sich bei weitem nicht nur für ProgrammierAnfänger eignet. Jedoch sind gerade die einfache Syntax und der Zwang zu einer logischen Struktur
für Neulinge sehr empfehlenswert. Die Sprache macht aber auch generell eine gute Figur, da sie
durch ihr modulares Konzept und die große mitgelieferte Bibliothek sehr mächtig ist und in vielen
Bereichen von Web-Anwendungen bis zu mathematisch-technischen Bereich zum Einsatz kommen
kann.
Gerade im Vergleich mit PHP und Java (Script) zeigt sich, dass Python einige Vorteile bietet, die
die Konkurrenten nicht aufweisen können. Hier sind z.B. die Integration von komplexen Zahlen als
Basistyp und die dynamische Typzuweisung und -Umwandlung zu nennen. Durch die Möglichkeit
der interaktiven Arbeit mit dem Python-Interpreter ist eine schnelle und leistungsfähige SoftwareEntwicklung möglich.
Auch in den Punkten Mächtigkeit, Funktionsvielfalt, Dokumentation und Verbreitung, dürfte
Python den beiden anderen bald nicht mehr hinterher hinken. Der Vorsprung von PHP und Java auf
diesen Gebieten ist bereits jetzt denkbar knapp. Zudem scheint Python weniger Sicherheitsprobleme
zu haben.
Fazit: Wer Programmieren lernen will, oder nach einer interessanten Alternative zu Java oder C++
sucht, der sollte sich Python einmal näher ansehen.
13
Stefan Uhr
Web-Programmierung mit Python
Literaturverzeichnis
[1]
Auszüge aus Wikipedia - die freie Enzyklopädie: Python
<http://de.wikipedia.org/wiki/Python_%28Programmiersprache%29>
[2]
Linkweiler, Ingo: Eignet sich die Skriptsprache Python für schnelle Entwicklungen
im Softwareentwicklungsprozess ? - Diplomarbeit - Siegen, 2002
<http://www.icc-computer.de/ingo/diplom/Diplomarbeit.pdf>
[3]
Fischbach, Rainer: Beschränkung aufs Wesentliche - iX 11/1999, S. 184
<http://www.heise.de/ix/artikel/1999/11/184/>
[4]
Python Module - Icoya OpenContent by struktur AG
<http://www.icoya.com/documentation/PageTemplates/de/advanced_templates_15.html>
[5]
von Löwis, Martin; Fischbeck, Nils: Python 2 - Einführung und Referenz
der objektorientierten Skriptsprache - 2.Auflage - Addison-Wesley, München, 2001
[6]
Arnold, Werner: Lieben Sie Python? - Log-in Ausgabe 2/2001
<http://www.log-in-verlag.de/wwwredlogin/Archiv/2001/2/Thema/>
[7]
Auszüge aus Wikipedia - die freie Enzyklopädie: Zope
<http://de.wikipedia.org/wiki/Zope>
[8]
Auszug aus Wikibooks - Website-Entwicklung mit PHP
<http://de.wikibooks.org/wiki/Websiteentwicklung:_PHP:_Beschreibung>
[9]
Pro-Linux.de - Richard Stallman warnt vor der Java-Falle
<http://www.pro-linux.de/news/2005/8006.html>
14
Herunterladen