Einführung in Python Jürgen Geuter (tante@emptiness.de) April 13, 2007 http://the-gay-bar.com Jürgen Geuter (tante@emptiness.de) Einführung in Python 1/20
1 Motivation 2 Metadaten 3 Python Syntax Basics Datentypen Modulkonzept Objektorientierung Exceptions 4 Programming Python The Zen of Python Advanced Python 5 Links/Fazit Jürgen Geuter (tante@emptiness.de) Einführung in Python 2/20
Motivation Python s Verbreitung wächst ständig im Desktop (Gnome Desktop, gdesklets) auf Handys (http://maemo.org) als Basis von Webanwendungen (www.modpython.org/, http://djangoproject.org) als Perl-Ersatz in der Shell Was ist dran? Jürgen Geuter (tante@emptiness.de) Einführung in Python 3/20
Metadaten 1990 von Guido van Rossum (damals an der Universität Amsterdam, heute bei Google) entwickelt heute im Besitz der Python Software Foundation lizensiert unter der Python Software Foundation License (BSD Style) aktuelle Version ist 2.5 benannt nach Monty Python s Flying Circus Jürgen Geuter (tante@emptiness.de) Einführung in Python 4/20
Grundlegendes Lesbarer Code ist grundlegendes Ziel Bruch mit dem C-Style-Paradigma Unterstützung diverser Programmierparadigmen (objektorientiert, prozedural, funktional) einfach zu lernen Comes with batteries included Jürgen Geuter (tante@emptiness.de) Einführung in Python 5/20
Typisierung statisch dynamisch stark C, C++, C# schwach? Perl, Jürgen Geuter (tante@emptiness.de) Einführung in Python 6/20
Syntax-Basics Blockdefinition per Einrückung, keine { und } notwendig Variablen-/Funktionsnamen sind case-sensitive Variablen beginnen mit einem Buchstaben, können aber Zahlen, - und enthalten Zeilenenden müssen nicht markiert werden (kein ; ) Einrückungen können mittels Tab oder Leerzeichen gemacht werden Jürgen Geuter (tante@emptiness.de) Einführung in Python 7/20
# Kommentare mit # # Zuweisung einer Variable eins = ' String ' zwei = 42 drei = [1, 2] vier = eins fuenf, sechs = drei # einige Tests eins = = zwei # ergibt False eins = = vier # ergibt True Jürgen Geuter (tante@emptiness.de) Einführung in Python 7/20
# Bedingungen # if( Bedingung ): # Anweisungen # elif ( Bedingung ): # Anweisungen # else : # Anweisungen # Beispiel : if(1==2): print ( 'Wird nie passieren ') else : print ( ' Wird immer passieren ') Jürgen Geuter (tante@emptiness.de) Einführung in Python 7/20
# eigene funktionen definieren # def myfunc ( Argumente ): # Anweisungen # return Wert # Beispiel def vergleich (a,b): if (a==b): return True else : return False Jürgen Geuter (tante@emptiness.de) Einführung in Python 7/20
# Schleifen # Beispiel liste = [1, 2, 3, 4] for wert in liste : print (2* wert ) i = 0 while (i<4): print (2* liste [i]) i+=1 Jürgen Geuter (tante@emptiness.de) Einführung in Python 7/20
Datentypen einfache Typen string: abcdef, "foo", """foobar""" int: 1, 42 float: 0.1, 42.2, 1e3 (1000.0) Listentypen list: [0,1,2], [ a, b ], [1, a,0.3] tuple: (1,2), ( x, y ), (1, c ) dict: { name : Horst, age : 30 } Jürgen Geuter (tante@emptiness.de) Einführung in Python 8/20
Modulkonzept Funktionalität wird in Modulen gekapselt jedes Python script ist ein Modul ein Modul kann aber auch ein Verzeichnis mit mehreren Untermodulen sein ein Modul kann beliebige Python Konstrukte enthalten (Module, Klassen, Funktionen) die mitgelieferte Funktionalität liegt ebenfalls in Modulen vor (RegExpr, xmlrpc,...) Module werden mittels des import statements eingebunden (z.b. import re ) Jürgen Geuter (tante@emptiness.de) Einführung in Python 9/20
Objektorientierung alles ist eine Klasseninstanz: primitive Typen wie int und list Module Klassen Erben von den vordefinierten Klassen ist möglich, genauso wie Mehrfachvererbung eigene Klassen sollten von der vordefinierten Klassen object erben, um vollen Zugriff auf alle Möglichkeiten zu haben, müssen das aber nicht Methoden in Instanzen, die auf die Instanz selbst zugreifen wollen, müssen self als ersten Parameter haben Jürgen Geuter (tante@emptiness.de) Einführung in Python 10/20
# OO in Python # class name ( Super 1, Super 2,..): # myvar = " somevalue " # def myfunc (self, param 1,...): # Anweisungen class person ( object ): myname = None # None ist der " Nullwert " myage = None def init (self, name, age ): self. myname = name self. myage = age # Instanziierung horst = person (" Horst Horstmann ", 30) Jürgen Geuter (tante@emptiness.de) Einführung in Python 10/20
# spezielle Methoden class example ( object ): # der Konstruktor def init ( self ): Anweisungen # der Destruktor def del ( self ): Anweisungen # die lesbare Representation def repr ( self ): return SomeString Jürgen Geuter (tante@emptiness.de) Einführung in Python 10/20
Exceptions Exceptions funktionieren ähnlich wie in Java das Statement raise löst eine Exception aus werden mittels try und except behandelt aufräumen kann man mittels finally ein try Block hat entweder ein finally statement oder except Ausdrücke, niemals beides Exceptions sollten von der mitgelieferten Klasse Exception erben, es lässt sich aber jede beliebige Klasse raisen die Python Library verwendet immer Exceptions als Fehlerbehandlungsmechanismus Jürgen Geuter (tante@emptiness.de) Einführung in Python 11/20
# unsere kleine Exception class myexception ( Exception ): def init (self, value ): self. error = value try : raise myexception (" Passiert immer ") except myexception, e: print (e. error ) # gibt " Passiert immer " aus Jürgen Geuter (tante@emptiness.de) Einführung in Python 11/20
The Zen of Python (Exzerpt) Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Readability counts. Special cases aren t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one - and preferably only one -obvious way to do it. If the implementation is hard to explain, it s a bad idea. If the implementation is easy to explain, it may be a good idea. Jürgen Geuter (tante@emptiness.de) Einführung in Python 12/20
# Li st en ma ni pu la ti on woche = [ 'mo ','di ','mi ','do ','fr ','sa ','so '] # Slices : woche [3] # do woche [-3] # fr woche [:3] # [ 'mo ', 'di ', 'mi '] woche [:-3] # [ 'mo ', 'di ', 'mi ', 'do '] woche [1:-3] # [ 'di ', 'mi ', 'do '] # Montage stinken woche. remove ( 'mo ') # Aber zwei Sonntage klingt gut woche. append ( 'so ') Jürgen Geuter (tante@emptiness.de) Einführung in Python 12/20
List comprehensions Problem: Eine Liste aus Objekten filtern alle Elemente der Liste um 1 reduzieren: liste=[1,2,3] neu = [elem-1 for elem in liste] # [0, 1, 2] alle ungeraden Elemente einer Liste liste = [1,3,12] neu = [elem for elem in liste if(elem%2==1)] # [1, 3] Jürgen Geuter (tante@emptiness.de) Einführung in Python 13/20
Magic Functions Python verwendet Callbackmethoden für Operatoren und Ausdrücke: str () wird auf einer Instanz ausgeführt, wenn sie mittels print ausgegeben wird abs () wird aufgerufen, wenn abs() auf eine Instanz angewendet wird a + b bedeutet eigentlich a. add (b), so lassen sich Operatoren sinnvoll verwenden Jede Instanz mit der Methode Funktion aufgerufen werden call () kann wie eine Jürgen Geuter (tante@emptiness.de) Einführung in Python 14/20
Formatstrings Strings zu Formatieren ist oft lästig, ein Hoch auf Formatstrings! print("hallo %s" % "Peter") ergibt: Hallo Peter print("ich bin %i Jahre alt" % 27) ergibt: Ich bin 27 Jahre alt print("mein Name ist %s und ich bin %i Jahre alt" % ("Peter", 27)) ergibt: Mein Name ist Peter und ich bin 27 Jahre alt print("zahltag is am %02i. des Monats." % 5) ergibt: Zahltag am 05. des Monats. Jürgen Geuter (tante@emptiness.de) Einführung in Python 15/20
Python Implementierungen Wer Python kann ist überall zu Hause ;) (c)python: Die auf http://python.org angebotene Version (in C implementiert) Jython: Python in Java implementiert, die Python Programme laufen somit in der JVM (man kann also auch von Java Klassen erben, d.h. z.b. Applets in Python schreiben) http://jython.org IronPython: Pythonimplementierung für.net http://www.codeplex.com/wiki/view.aspx? ProjectName=IronPython Jürgen Geuter (tante@emptiness.de) Einführung in Python 16/20
Fazit Python: einfaches Erlernen (Easy to learn, hard to master) hilft, übersichtlichen, wartbaren Quellcode zu schreiben steht beim Arbeiten nicht im Weg, sondern hilft, Probleme effizient zu lösen frei, auf nahezu jedem Linux System automatisch installiert, für diverse andere Plattformen verfügbar Python Module sind plattformunabhängig* (bis auf die, die schlecht programmiert oder spezifisch für eine Plattform sind) sehr verbreitet, besitzt eine große Community und sehr viel Dokumentation Jürgen Geuter (tante@emptiness.de) Einführung in Python 17/20
Links http://www.python.org (die offizielle Python Seite mit Dokumentation) http://www.ibiblio.org/obp/thinkcspy/ How to Think Like a Computer Scientist - Learning with Python http://www.diveintopython.org, sehr gutes Buch über Python von Marc Pilgrim http://www.python.org/dev/peps/pep-0020/ The Zen of Python Jürgen Geuter (tante@emptiness.de) Einführung in Python 18/20
vertiefende Links http://www.sqlalchemy.org ein flexibles Python SQL Toolkit um datenbankunabhängig performant zu arbeiten http://www.pygtk.org/ GTK Bindings für Python http://www.wxpython.org/ WXWidgets Bindings für Python http://www.djangoproject.com/ Django web framework Jürgen Geuter (tante@emptiness.de) Einführung in Python 19/20
Noch Fragen? Jürgen Geuter (tante@emptiness.de) Einführung in Python 20/20