Einführung in Python Stefan Dziwok Universität Paderborn 1. Februar 2007
Referenzen Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we re looking for more people with skills in this language. Peter Norvig, director of search quality at Google, Inc. Python is fast enough for our site and allows us to produce maintainable features in record times, with a minimum of developers. Cuong Do, Software Architect, YouTube.com
Basisdaten Erscheinungsjahr: 1990 Erfinder: Guido van Rossum Aktuelle Version: 2.5 (19.09.2006) Paradigmen: objektorientiert aspektorientiert funktional Typisierung: stark, dynamisch ( Duck Typing ) Betriebssystem: plattformunabhängig Website: www.python.org Lizenz: Python License (Open Source) Ziele von Python Python als einfache und übersichtliche Skriptsprache dennoch mächtiger Funktionsumfang kostenlos verfügbar und individuell anpassbar in andere Sprachen integrierbar für tägliche Aufgaben geeignet kurze Entwicklungszeiten und hohe Wartbarkeit
Typisierung Werte von Variablen bekommen dynamisch einen Typ zugewiesen. Zahlen sind untereinander implizit umwandelbar. Typanpassung zwischen Zahlen und Strings muss explizit sein. Beispiel: >>> a = 1 >>> b = 2 >>> print a + b TypeError: unsupported operand type(s) for +: int and str >>> print str(a) + b 12 >>> print a + int(b) 3
Strukturierung durch Einrücken für Code-Blöcke werden keine Klammern (z.b. {...}) oder Schlüsselwörter (z.b. do...od) genutzt werden durch gleichmäßiges Einrücken (Leerzeichen) definiert Anweisungen sind durch Zeilenumbruch trennbar Vorteil: klare und gut lesbare Struktur, weniger Strukturzeichen Nachteil: Umstand und Einschränkung Struktur-Vergleich in C: int fakultaet(int x) { if(x<=1) return 1; else { return x*fakultaet(x-1); } } in Python: def fakultaet(x): if (x <= 1): return 1 else: return x * fakultaet(x - 1)
Verzweigungen Die if-anweisung ersetzt, durch den mittleren optionalen elif - Teil, switch...case... - Anweisungen anderer Sprachen. Beispiel: if (x < 0): y = 1 elif x == 0: y = 2 elif x == 1: y = 3 else: y = 4
Schleifen Die for-anweisung iteriert über Elemente einer Sequenz, beispielsweise über eine Liste, die mit der range()-funktion erstellt werden kann. Die while-anweisung wiederholt einen Block so lange, wie ein logischer Ausdruck wahr ist. for und while im Vergleich >>> range(1,6) [1, 2, 3, 4, 5] >>> for x in range(1,6): >>> print x, 1 2 3 4 5 >>> x = 0 >>> while x < 10: >>> x = x + 1 >>> print x, 1 2 3 4 5 Ausnahmebehandlung Das try-statement ist für das Testen von Fehlerbedingungen gedacht. Beispiel >>> x = 0 >>> try:... print 1.0/x... except ZeroDivisionError:... print Division durch Null.... else: # falls try erfolgreich ist... print Keine Division durch Null.... finally: # wird immer ausgeführt... print Eine Division fand statt. Division durch Null. Eine Division fand statt.
Funktionen Mit def lassen sich Funktionen definieren. Funktionsrümpfe dürfen nicht leer sein. (stattdessen: pass) Beispiel # keine Angabe eines Rückgabewertes nötig >>> def returnsomething():... return something # Parameter können Default-Werte haben >>> def fun(a, b=2):... print a, b >>> fun(1) # Funktionsaufruf 1 2 # direkte Bezug auf formale Parameter >>> fun(a=1, b=3) 1 3
Listen Eine Liste kann Einträge von verschiedenen Typen haben. Man kann sie verändern, teilen, konkatenieren und verschachteln. Beispiel >>> a = [ hallo,123,13.37] >>> a # Ausgabe der Liste [ hallo,123,13.37] >>> a[0] # der 1. Wert hallo >>> a[1:2] # Teilbereich x: 1 <= x < 2 123 >>> a[2] = 1337 # Listeneinträge sind änderbar Funktionen für Listen Durch die Kombination von a.append() und a.pop(0) bzw. a.pop() lässt sich eine Queue bzw. ein Stack simulieren. Beispiel >>> a = [1.5, 2, 2, 3.5] >>> a.count(2) # Häufigkeit von Wert 2 2 >>> a.append(4) # füge 4 ans Ende an >>> a.pop(0), a.pop() # lösche ersten/letzten Wert [1.5, 4] >>> a.insert(2, -1) # Wert -1 an Index 2 einfügen
Dictionary Ein Dictionary ist ein assoziatives Array von der Form <key,value>. Der Typ der Keys kann verschieden sein. Beispiel >>> dict = { anton =123, 456= bert } >>> dict[ carl ] = 789 # neuer Eintrag >>> dict[ anton ] # Abfrage 123 >>> del dict[ anton ] # Eintrag löschen >>> dict # Ausgabe {456: bert, carl : 789} Mehr über Funktionen Es gibt 2 spezielle Funktionsparameter, die eine Liste bzw. ein Dictionary repräsentieren. Gefüllt werden beide mit übergebenen Werten oder Tupeln, die den vorhandenen Parameter nicht zugewiesen werden konnten. Beispiel # *args: eine Liste von Werten # **kwargs: ein Dictionary mit <key,value>-tupeln >>> def fun(a, b=2, *args, **kwargs): print a, b, args, kwargs >>> fun(1, 3, 6, 7, x=8, y=9) 1 3 (6, 7) { y : 9, x : 8}
Funktionale Programmierung Nachfolgend ein Beispiel für eine Funktion höherer Ordnung. Beispiel: >>> def add_and_print_maker(x):... def temp(y):... print "%d + %d = %d" % (x, y, x+y)... return temp >>> add_and_print_maker(1)(2) 1 + 2 = 3
Funktionen für die Funktionale Programmierung Zwei eingebaute Funktionen für die Verarbeitung von Listen: Beispiel: # map(func, sequenz) ruft jeweils func(x) auf # Ergebnisse werden in einer Liste gespeichert >>> def quad(x): return x*x >>> map(quad, range(1, 6)) [1, 4, 9, 16, 25] # reduce(func, sequenz, init) ruft func(x,y) auf # x ist das Ergebnis vom letzten return (Start:init) >>> def add(x,y): return x+y >>> reduce(add, range(1, 6), 0) 15 # = ((((0+1)+2)+3)+4)+5
Module In Python lassen sich externe Skripte und ihre Funktionen durch import... bzw. durch from... import... einbinden. Beispiel # Datei math1.py def quad(x): return x*x def cube(x): return x*x*x # Modul-Import >>> import math1 >>> math1.quad(2) 4 # Funktionen-Direktimport >>> from math1 import quad,cube >>> cube(2) 8 Standardbibliotheken Philosophie: Batteries included unterstützt viele Standardformate und -Protokolle (insbesondere Internet-Anwendungen) Plattformunabhängigkeit aber auch Plattformspezialisierungen gute Anbindung zu anderen Programmiersprachen (z.b. zur GUI-Erstellung)
Objektorientierung Aus Klassen werden Objekte gebildet. Das erste Argument einer Methode ist immer explizit die Objekt-Instanz selbst. Sie wird meist self genannt. In Python ist Mehrfachvererbung und das Überschreiben von Methoden möglich. Beispiel: >>> class Math:... def init (self,x): # Konstruktor... self.x = x # self.x ist Objektvariable... def quad(self):... return self.x * self.x >>> m = Math(5) # Instanziierung >>> m.quad() 25
Eigene Erfahrungen Python als Standardskriptsprache bei dspace Skripte für verschiedenste Problemstellungen von unterschiedlicher Größe Schwerpunkt ist die Automatisierung verschiedenster Programme (Word, Excel, Datenbanken, dspace-produkte) Ziele von Python (Lesbarkeit, Einfachheit, Wartbarkeit) werden erfüllt Referenzen http://python.org/ Python Software Foundation. http://de.wikipedia.org/wiki/python_ (Programmiersprache) Wikimedia Foundation Inc.