Seminar Programmiersprachen Skriptsprachen am Beispiel Python Norman Thomas 8. Juni 2004
Überblick Was sind Skriptsprachen? Was ist Python? Python und Syntax Datentypen Kontrollstrukturen Module Ausführung & Kompilierung Debugging Andere Aspekte von Python OOP Funktionale Programmierung Anwendungsgebiete Schlusswort Quellenverzeichnis
Was sind Skriptsprachen? Quellcode wird interpretiert evtl. vor Interpretierung erst Kompilierung zu Bytecode dynamische Typisierung Garbage Collector typischerweise weniger Aufwand plattformunabhängig
Was ist Python? Anfang der 90er erfunden Erfinder: Guido van Rossum Benannt nach Monty Python Skriptsprache objektorientierte Programmierung möglich Elemente der funktionalen Programmierung OpenSource aktuelle Version: 2.3.4 Standard-Python ist CPython es gibt auch Jython und Python.NET Jython erzeugt Java-Bytecode auch frozen binaries erzeugbar
Syntax kein Semikolon am Zeilenende Aneinanderreihung von Anweisungen getrennt durch Semikolon möglich Empfehlung das nicht zu tun Einrückung als zentrales Syntaxmerkmal Blöcke durch Einrückung gekennzeichnet Erhöhung der Lesbarkeit durch o.g. Mittel
Datentypen dynamische Typisierung keine Variablendeklaration keine Typangabe zur Laufzeit änderbare Typen strenge Typisierung (fast) keine implizite Typkonvertierung implizite Konvertierung zwischen int, float, complex trotzdem gibt es Casts
Datentypen (2) Python bietet einige mitgelieferte Datentypen Ganzzahlen und Gleitkommazahlen Ganzzahlen können beliebig groß werden Complex c = 1+4j Strings s = "Python" Tupel t = (1, 2, 3) Listen l = [1, 2, 3] Hashtabellen d = {1 : 2, "gerade" : 0} Je nach Typ ist der Wert der Variablen in-place veränderbar
Kontrollstrukturen Python bietet für Bedingungen if, elif, else jedoch kein switch / case Bereichsabfragen möglich bool'sche Ausdrücke sind keine kryptischen Zeichen für Schleifen for while kein do-while oder repeat-until keine Klammern im Kopf Kopf endet mit Doppelpunkt Rümpfe müssen eingerückt werden
Funktionen Form der Modularisierung Wiederverwendbarkeit von Code Funktionen können Parameter besitzen Parameter immer als Referenzen übergeben evtl. nicht beabsichtigte Veränderung der Originalparameter erst kopieren auch bei Parametern keine statische Typisierung Defaultparameter möglich verschiedene Arten des Funktionsaufrufs Return wird nicht deklariert
Module dienen der Modularisierung Wiederverwendbarkeit von Code ähnlich den Packages aus Java Modul ist eine Datei Module sind importierbar verschiedene Varianten zum Importieren große Module-Bibliothek bereits vorhanden Jython ermöglicht sogar Importieren von Java- Klassen
Ausführung und Kompilierung Python-Code wird interpretiert Interaktive Shell Script als Datei Aufruf des Skripts mit "#!/pfad" oder python Kompilierung zu Bytecode Ausführung des Bytecodes durch PVM Psycho (JIT) kompiliert Teile des Programms zur Laufzeit zu echten binären Programmen Psycho bringt Geschwindigkeitsvorteil (4x)
Debugging mitgelieferter Debugger im Module pdb Modul importieren Programm zum debuggen importieren pdb.run("instance = progmod.func()") Breakpunkte möglich Schritt-für-Schritt Ausführung möglich Überwachen von Variablen Ändern von Variablen Anzeigen des Quellcodes & Aufrufstacks
Objektorientierung Auch OOP zur Code-Wiederverwendung Python kennt Klassen, Methoden und Attribute Python kennt keine Sichtbarkeiten unsicherer Mechanismus zum Ersatz von Sichtbarkeiten: varname Konstruktoren & Destruktoren self Ansprechen von Attributen Vererbung und Mehrfachvererbung möglich
Funktionale Programmierung lambda: einzeilige Funktionen reduce: reduce((lambda x,y : x+y), (1,2,3)) 1+2+3 = 6 filter: filtert Elemente aus Liste aus filter((lambda x : x%2 == 0), (1,2,3,4)) (2,4) map: wendet Funktion auf jedes Listenelement an map((lambda x : x**3), (1, 2, 3)) (1, 8, 27) zip: verknüpft Listen zu einer Liste mit Pärchen zip((1, 3), (2,4)) ((1, 2), (3, 4)) list comprehensions [ x**2 for x in range(100) if x % 2 == 0]
Anwendungsgebiete Steuerung anderer Programme serverseitige Programmierung (CGI) Administrationstools Zope (Application Server) auch grafische Oberflächen möglich
Schlusswort herausragendstes Merkmal: Lesbarkeit Pythons Philosophie: Einfachheit (Orthogonalität) Dadurch vereinfacht sicht Wartung Skriptsprache, daher portabel geeignet für schnelle Lösung von Problemen Allround-Sprache Effizienz wird nicht außer Acht gelassen (Psyco, Generatoren, Referenzen statt Kopien) Weitere Features: PythonDoc (JavaDoc),Exception- Handling, Unit-Tests (pyunit) Korrektheit wird unterstützt durch Lesbarkeit, Orthogonalität, Debugging, Unit-Tests Es gibt also keinen Grund, Python nicht zu nutzen!
Quellenverzeichnis Learning Python, Mark Lutz & David Ascher, O'Reilly, 2003, 0-596- 00281-5 Programming Python, Mark Lutz, O'Reilly, 2002, 0-596-00085-5 Offizielle Python Seite: www.python.org, www.python.org/docs/current Die Programmiersprache Python, Stefan Schwarzer, 2001, http://home.tu-clausthal.de/~svss/python_vortrag/ ix-artikel Wie Python arbeitet, Rainer Fischbach, Nov. 1999, www.heise.de/ix/artikel/1999/11/184/ WikiPedia, Juni 2004, http://de.wikipedia.org/wiki/python_%28programmiersprache%29 IBM DeveloperWorks, diverse Online-Artikel, http://www-106.ibm.com/developerworks/views/linux/articles.jsp?sort_o
Vielen Dank für Eure Aufmerksamkeit