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