Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss Module & Objektorientierung Schluss Einführung in Python Stefan Dziwok Universität Paderborn 1. Februar 2007 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss Module & Objektorientierung Schluss Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss Module & Objektorientierung Schluss Basisdaten Erscheinungsjahr: Erfinder: Aktuelle Version: Paradigmen: Typisierung: Betriebssystem: Website: Lizenz: Übersicht Grundlagen 1990 Guido van Rossum 2.5 (19.09.2006) objektorientiert aspektorientiert funktional stark, dynamisch („Duck Typing“) plattformunabhängig www.python.org Python License (Open Source) Kontrollstrukturen Datenstrukturen Funktionale Programmierung 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss Module & Objektorientierung Schluss Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung 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) Module & Objektorientierung Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss Module & Objektorientierung Schluss Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 >>> [1, >>> >>> 1 2 Übersicht range(1,6) 2, 3, 4, 5] for x in range(1,6): print x, 3 4 5 Grundlagen Kontrollstrukturen Datenstrukturen >>> x = 0 >>> while x < 10: >>> x = x + 1 >>> print x, 1 2 3 4 5 Funktionale Programmierung Module & Objektorientierung 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. Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Module & Objektorientierung Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung 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 Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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} Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung 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} Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss Module & Objektorientierung Schluss Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Module & Objektorientierung Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung 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) Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 # Instanziierung >>> m = Math(5) >>> m.quad() 25 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Gliederung 1 Übersicht 2 Grundlagen 3 Kontrollstrukturen 4 Datenstrukturen 5 Funktionale Programmierung 6 Module & Objektorientierung 7 Schluss Module & Objektorientierung Schluss Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Schluss 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 Übersicht Grundlagen Kontrollstrukturen Datenstrukturen Funktionale Programmierung Module & Objektorientierung Referenzen http://python.org/ Python Software Foundation. http://de.wikipedia.org/wiki/Python_ (Programmiersprache) Wikimedia Foundation Inc. Schluss