Proseminar Einführung in Python von David Voigt Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 1 von 44 Inhalt 1. Grundlegende Konzepte 2. Datentypen a) b) c) d) 3. 4. 5. 6. 7. NoneType Numerische Datentypen sequentielle Datentypen Mengen Kontrollstrukturen Ausnahmebehandlung Built-in Funktionen Module und Pakete Weitere Spracheigenschaften Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 2 von 44 1. Grundlegende Konzepte • Imperative Programmiersprache, welche weitere Programmierparadigmen vereint • Interpretierte Programmiersprache • Ausführung auf allen Plattformen möglich • Möglichkeit der einfachen Erweiterung der Standardbibliothek von Python • PSF-Lizenz (erlaubt es den Python-Interpreter lizenzkostenfrei in kommerzielle Anwendungen einzubetten) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 3 von 44 2. Datentypen 1. NoneType – Leerer Datentyp, einzige Instanz ist die Konstante None – mögliche Operationen: • Prüfen auf None: var = None if var is None: print(„var ist None“) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 4 von 44 2. Datentypen 2. Numerische Datentypen ganze Zahlen (int und long) Gleitkommazahlen (float) Boolesche Werte (bool) Komplexe Zahlen (complex) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 5 von 44 2. Datentypen Operationen auf numerischen Datentypen Operation Kurzschreibweise Vergleichsoperationen x=x+y x += y x == y x=x–y x -= y x != y x=x*y x *= y x<y x=x/y x /= y x <= y x=x%y x %= y x>y x = +x x >= y x = -x x = x ** y x **= y x = x // y x //= y Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 6 von 44 2. Datentypen spezielle Operationen für ganzzahlige Typen Operator Kurzschreibweise Bedeutung x=x&y x &= y Bitweise UND von x und y x=x|y x |= y Bitweise OR von x und y x=x^y x ^= y Bitweise XOR von x und y x = ~x Bitweise Komplement von x x = x << n x <<= n Bitverschiebung um n Stellen nach links x = x >> n x >>= n Bitverschiebung um n Stellen nach rechts Beispiele: 0 1 1 0 1 1 0 1 109 0 1 1 0 1 1 0 1 109 & 1 0 1 1 0 1 0 1 181 | 1 0 1 1 0 1 0 1 181 0 0 1 0 0 1 0 1 37 1 1 1 1 1 1 0 1 253 Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 7 von 44 2. Datentypen booleschen Werten Operationen: not x, x and y, x or y Wahrheitswerte bei anderen Datentypen: Basisdatentyp False-Wert True-Wert NoneType None - int, long 0 alle Zahlen außer 0 float 0.0 alle Zahlen außer 0 complex 0 + 0j alle Zahlen außer 0 str „“ jeder nicht leere String list [] jede nicht leere Liste tuple () jedes nicht leere Tupel dict {} jedes nicht leere Dictionary set, frozenset set(), frozenset() jede nicht leere Menge Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 8 von 44 2. Datentypen komplexen Zahlen Darstellung: x + yj (Beispiel: 3 + 4j) Methoden und Attribute: Methoden und Attribute Rückgabewert x.real liefert den Realteil von x x.imag liefer den Imaginärteil von x x.conjugate() liefert die zu x konjugiert komplexe Zahl Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 9 von 44 2. Datentypen 3. sequentielle Datentypen – Strings (str, unicode) – Listen (list) – unveränderliche Listen (tuple) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 10 von 44 2. Datentypen Operationen sequenzieller Datentypen Operation Erklärung s in x prüft, ob s in x ist (liefert Wahrheitswert) s not in x prüft, ob s nicht in x ist (liefert Wahrheitswert) x + y (x += y) Verkettung von x und y (Verkettung von x und y wird x zugewiesen) x * n oder n * x (x *= n) Verkettung, welche n Kopien von x enthält (Verkettung, welche n Kopien von x enthält wird x zugewiesen) x[n] liefert das n-te Element von x x[n:m] liefert eine Sequenz mit den Elementen von n bis m x[n:m:k] liefert eine Sequenz mit den Elementen von n bis m, wobei nur jedes kte Element beachtet wird len(x) gibt die Anzahl der Elemente von x zurück min(x) gibt das kleinste Element zurück, sofern eine Ordnungsreleation def. ist max(x) gibt das größte Element zurück, sofern eine Ordnungsrelation def. ist Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 11 von 44 2. Datentypen einen String erzeugen und Escape-Sequenzen str1=„…“ str2=‚…‘ str3=„„„zeile1 zeile2“““ str4=(„zeile1“ „zeile2“) Escape-Sequenz Erklärung \a erzeugt Signalton \b Backspace \f Seitenvorschub \n Linefeed \r Carriage Return \t horizontaler Tab \v vertikaler Tab \“ Doppeltes Hochkomma (erscheint als Zeichen) \\‘ Einfaches Hochkomma (erscheint als Zeichen) \\ Backslash (erscheint als Zeichen) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 12 von 44 2. Datentypen Methoden zum Trennen von Strings Methode Erklärung s.split([sep[, maxsplit]]) zerteilt einen String anhand des im Parameter sep angegebene Zeichen und gibt eine Liste zurück (der Parameter maxsplit kann die Anzahl der Teilungen begrenzen) s.rsplit([sep[, maxsplit]]) macht das selbe wie die Funktion split, nur das rsplit am Ende des String mit dem Teilen beginnt s.splitlines([keepends]) Gibt eine Liste mit den Zeilen des String zurück (Um Zeilenvorschübe am Ende zu erhalten ist der Parameter keepends auf True zu setzen) s.partition(sep) Der String wird in drei Teile geteilt, welche in einem Tupel zurück gegeben werden. Der erste Teil ist die Zeichenkette vor dem String sep, der zweite Teil ist der String sep und der dritt Teil ist der hinter dem String sep. s.rpartition(sep) macht das selbe wie die Funktion partition, nur das rpartition am Ende des String beginnt Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 13 von 44 2. Datentypen Methoden zum Suchen in Strings Methode Erklärung s.find(sub[, start[, end]]) Es wird der Index der erstem Vorkommen von sub in s zurück geben (falls sub nicht in s vorkommt wird -1 zurück gegeben). s.rfind(sub[, start[, end]]) Macht das selbe wir find, nur das die Suche am Ende des Strings begonnen wird. s.index(sub[, start[, end]]) Macht das selbe wie find, nur das hier im Fehlerfall eine ValueError Exception geworfen wird. s.rindex(sub[, start[, end]]) Macht das selbe wie rfind, nur das hier im Fehlerfall eine ValueError Exception geworfen wird. s.count(sub[, start[, end]]) Zählt die Anzahl der Vorkommen von sub in s Die optionalen Parameter start und end dienen dazu, den Suchbereich im String einzugrenzen Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 14 von 44 2. Datentypen Methoden zum Ersetzen von Teilstrings Methode Erklärung s.replace(old, new[, count]) Rückgabe eines Strings, indem alle Vorkommen von old durch new ersetzt wurden (durch count kann die Anzahl der Ersetzungen begrenzt werden) s.lower() Rückgabe eines Strings, indem nur Kleinbuchstaben sind s.upper() Rückgabe eines Strings, indem nur Großbuchstaben sind s.swapcase() Rückgabe eines Strings, indem die Großbuchstaben nun klein sind und die Kleinbuchstaben nun groß sind s.capitalize() Rückgabe eines Strings, indem der erste Buchstabe ein Großbuchstabe ist s.title() Rückgabe eines Strings, indem jeweils alle Wörter mit einem Großbuchstaben beginnen s.expandtabs([tabsize]) Rückgabe eines Strings, indem alle Tabulatoren durch Leerzeichen ersetzt wurden (optional kann durch tabsize die Anzahl der Leerzeichen angegeben werden) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 15 von 44 2. Datentypen Beispiele zu den gezeigten Methoden str1 = „a,b,c,d,e,f,g“ str1.split(„,“) #[a,b,c,d,e,f,g] str1 = „a,b,c,d,e,f,g“ str1.count(„,“) #6 str1 = „www.google.de“ str1.partition(„.“) #(„www“,“.“,“google.de“) str1.rpartition(„.“) #(„www.google“,“.“,“de“) str1 = „a,b,c,d,e,f,g“ str1.replace(„,“,“.“) # „a.b.c.d.e.f.g“ str1 = „a,b,c,d,e,f,g“ str1.find(„c“) #4 str1 = „a,b,c,d,e,f,g“ str1.upper() # „A,B,C,D,E,F,G“ Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 16 von 44 2. Datentypen Formatierung von Strings „…%...X…%...Y…“ % (Wert1,Wert2) Kennung Erklärung Kennung Erklärung d Ganzzahl mit Vorzeichen f i siehe d Fließkommazahl in Dezimalschreibweise o Oktalzahl ohne Vorzeichen F siehe f u Ganzzahl ohne Vorzeichen g Fließkommazahl in wissenschaftl. Schreibweise, wenn Exponent < -4 x Hexadezimalzahl ohne Vorzeichen G siehe g X siehe x c Zeichen (Länge 1) e Fließkommazahl in wissenschaftl. Format (kleines „e“) r String (durch Methode repr) E Fließkommazahl in wissenschaftl. Format (großes „e“) s String (durch Methode str) % Ausgabe des Prozentzeichen Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 17 von 44 2. Datentypen Umwandlungsflags Flag Erklärung # Ausgabe im alternativen Modus 0 Bei einer Unterschreitung der Mindestlänge bei numerischen Werten wird mit Nullen aufgefüllt - Bei Unterschreitung wird von rechts aufgefüllt (Leerzeichen) Bei numerischen Werten, welche positiv sind, wird ein Leerzeichen davor geschrieben + Bei numerischen Werten wird das Vorzeichen immer angegeben str = „Preis: %5.2f EUR“ %(8.443) #Preis: 8.44 EUR str = „Preis: %06d EUR“ %(28) #Preis: 000028 EUR str = „Preis: %+5.2f EUR“ %(8.443) #Preis: +8.44 EUR str = „Preis: %-6d EUR“ %(28) #Preis: 28 EUR Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 18 von 44 2. Datentypen Operationen für den Datentyp list Operator Erklärung l[n] = x Das Element von l mit dem Index n wird durch x ersetzt l[n:m] = t Die Elemente der Liste von n bis m-1 werden durch t ersetzt (t muss iterierbar sein) l[n:m:k] = t Die Elemente der Liste von n bis m-1 werden durch t ersetzt, wobei nur jedes k-te Element beachtet wird (t muss iterierbar sein) del l[n] Das Element an der Stelle n wird entfernt del l[n:m] Die Elemente der Liste von n bis m-1 werden entfernt del l[n:m:k] Die Elemente der Liste von n bis m-1 werden entfernt, wobei nur jedes k-te Element beachtet wird Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 19 von 44 2. Datentypen Methoden für den Datentyp list Methode Erklärung l.append(x) Das Element x wird an das Ende der Liste angeangen l.extend(t) Es werden alle Elemente von t an das Ende der Liste angehangen l.count(x) Gibt an, wie oft das Element x in der Liste vorkommen l.index(x[,m[,k]]) Der Index i des ersten Vorkommens des Element x wird ausgegeben (optional kann Suchbereich angegeben werden, es wird dann entweder ab m oder von m bis k-1 gesucht) l.insert(n,x) Das Element x wird in der Liste an die Stelle n eingefügt. Alle folgenden Element werden eine Stelle nach hinten geschoben) l.pop([n]) Das n-te Element der Liste wird zurück gegeben (falls n nicht angegeben das letzte), anschließen wird das Element aus der Liste gelöscht l.remove(x) Das erste Vorkommen von x in der Liste wird gelöscht l.reverse() Die Reihenfolge der Elemente in der Liste wird umgekehrt Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 20 von 44 2. Datentypen Sortierung beim Datentyp list Methode: l.sort([key[,reverse]]) def real_teil(z): return z.real liste = [10 + 12j, 3 + 6j, 8 + 22j, 5-2j] liste.sort(key=real_teil) liste = [5, 8, 6, 2, 4] liste.sort(reverse=True) print (liste) # [8, 6, 5, 4, 2] Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 21 von 44 2. Datentypen 4. Mappings – Dictonary (dict) d={ „Sachsen“ : „Dresden“, „Thüringen“ : „Erfurt“, „Berlin“ : „Berlin“ } Operationen Operation Erklärung len(d) Gibt die Anzahl der Element von d zurück d[k] Gibt den Wert mit dem Schlüssel k zurück del d[k] Löscht den Schlüssel k und den dazugehörigen Wert k in d liefert Wahrheitswert, ob der Schlüssel k in d enthalten ist k not in d liefert Wahrheitswert, ob der Schlüssel k nicht in d enthalten ist Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 22 von 44 2. Datentypen Methoden des Dictonarys Methode Erklärung d.clear() Löscht den gesamten Inhalt des Dictonarys d.copy() Kopiert das Wörterbuch (aber nicht den Inhalt) d.items() Erzeugt eine Liste von Tupeln (Schlüssel, Wert) mit allen Paaren aus d d.keys() Erzeugt eine Liste, welche alle Schlüssel enthält d.values() Erzeugt eine Liste, welche alle Werte enthält d.update(e) Fügt dem Wörterbuch d das Wörterbuch e hinzu d.fromkeys(l[, v]) Rückgabe ist ein neues Wörterbuch, welches seine Schlüssel aus der Liste l bezieht (optional können die Werte mit v initialisiert werden) d.get(k[, a]) Falls der Schlüssel k existiert wird der Wert von k geliefert, sonst a d.setdefault(k[, a]) Falls der Schlüssel k nicht existiert wird er mit a initialisiert d.popitem() Rückgabe ist ein zufälliges Tupel (Schlüssel, Wert), Paar wird anschließend aus d entfernt Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 23 von 44 2. Datentypen 5. Mengen – Mengen (set) – unveränderliche Mengen (frozenset) allgemeine Operationen auf Mengen Operation Erklärung len(s) Gibt die Anzahl der Element von s zurück e in s Liefert Wahrheitswert, ob e in s enthalten ist e not in s Liefert Wahrheitswert, ob e nicht in s enthalten ist Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 24 von 44 2. Datentypen Mengenoperationen Operation Erklärung s <= m Liefert True, wenn s Teilmenge von m s<m Liefert True, wenn s echte Teilmenge von m s >= m Liefert True, wenn m Teilmenge von s s>m Liefert True, wenn m echte Teilmenge von s s|m Rückgabe einer Menge, welche Vereinigung von s und m bildet s&m Rückgabe einer Menge, welche Schnittmenge von s und m bildet s-m Rückgabe einer Menge, welche Differenz von s und m bildet s^m Rückgabe einer Menge, welche symmetrische Differenz von s und m bildet Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 25 von 44 3. Kontrollstrukturen If, elif, else if Bedingung: … elif Bedingung: … else: … abkürzende Schreibweise: y = (1 if x == 2 else 2) if x==1: print („x=1“) if x==1: print („x=1“) else: print („x ungleich 1“) if x==1: print („x=1“) elif x==2: print („x=2“) else: print („x ungleich 1“) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 26 von 44 3. Kontrollstrukturen Schleifen While-Schleife while Bedingung: … else: … x=4 while x>1: print (x) x=x-1 else: print („x ist 1“) For-Schleife for Variable in Objekt: … Range: range(start, stop, step) for i in range (1, 5, 2): print (i) #1 #3 Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 27 von 44 3. Kontrollstrukturen weiteres zu Schleifen vorzeitiger Abbruch einer Schleife: break vorzeitiger Abbruch eines Schleifendurchlauf: continue break while Bedingung: … break … else: … … continue while Bedingung: … continue … else: … … Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 28 von 44 3. Kontrollstrukturen eigene Funktionen definieren def Funktionsname (Parameter 1, …, Parameter n): … def sum1 (a, b): return Wert print (a+b) def sum2 (a,b): optionale Parameter: return a+b (Parameter 1 = Standardwert, …) def mult (a, b, c, d=0): return (a*b*c)+d def mult (a, b, c, d=0): return (a*b*c)+d print (mult(2, 4, 3)) # 24 print (mult(2, 4, 3, 8)) # 32 print (mult(c=2, b=4, a=3)) # 24 print (mult(d=2, a=4, b=3, c=8)) # 98 Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 29 von 44 3. Kontrollstrukturen Variablenzugriff innerhalb einer Funktion Um Zugriff auf globale Variablen zu erhalten ist das Schlüsselword global nötig anonyme Funktionen: funktion = lambda a, …, z: Rückgabewert def funktion (): a = „lokal“ a = „global“ funktion() print (a) # global def funktion (): global a a = „lokal“ a = „global“ funktion() print (a) # lokal Proseminar: Softwaretechnologie mit Python David Voigt mult = lambda a, b, c: a*b*c d = mult (1,2,4) print (d) #8 18.11.2010 Folien 30 von 44 3. Kontrollstrukturen Die Anweisungen del und pass Die del-Anweisung löscht Variablen oder Teile von sequentiellen Datenstrukturen. Die pass-Anweisung hat keine Funktion und lässt sich daher ideal als Platzhalter einsetzen. a = [2, 3, 8] del a[1] print (a) # [2, 8] del a print (a) # NameError: name 'a' is not defined Proseminar: Softwaretechnologie mit Python David Voigt def funktion(): pass y=1 if y==1: pass else: pass 18.11.2010 Folien 31 von 44 4. Ausnahmebehandlung Exceptions in Python Erben alle von der Klasse BaseException • ArithmeticError – OverflowError – ZeroDivisionError • LookupError – IndexError • SyntaxError • KeyboardInterrupt Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 32 von 44 4. Ausnahmebehandlung Abfangen einer Exception try: … def funktion (liste, n): try: except Exceptiontyp: back = liste[n] except IndexError: … print („Es trat ein Fehler auf“) back = 0 else: else: print („Es trat kein Fehler aus“) … finally: return back finally: … Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 33 von 44 4. Ausnahmebehandlung eigene Exceptions Es besteht die Möglichkeit eigene Exception-Klassen zu definieren, welche dann geworfen werden können class ExceptionName(Exception): … class Ausnahme(Exception): pass raise Ausnahme() #Traceback (most recent call last): #File „…", line 25, in <module> #__main__.Ausnahme Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 34 von 44 5. Built-in Funktionen Funktion print print(*value, sep=„ “, end=„\n“, file=sys.stdout) Parameter Erklärung *value Angabe einer oder mehrerer Strings, welche ausgegeben werden sollen sep Angabe eines String, welche zwischen den Strings von *value ausgegeben werden soll end Angabe eines String, welche nach dem letzten String von *value ausgegeben werden soll file Angabe, wohin die Strings ausgegeben werden sollen print(„ein String“, „noch ein String“) #ein String noch ein String print(„Str1“, „Str2“, sep=„_“, end=„“) print(„Str3“,“Str4“,sep=„.“) #Str1_Str2Str3.Str4 Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 35 von 44 5. Built-in Funktionen Funktion input input(prompt=„“) prompt ist ein optionaler String, welche übergeben werden kann (dieser wird dann direkt vor der Eingabe stehen) Funktion isinstance isinstance(object, class-or-type-or-tuple) isinstance(a, (A, B, C) prüft ob a Instanz von A, B oder C a = „Ich bin ein String!“ if isinstance(a,str): print(„Ja, du bist wirklich ein String“) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 36 von 44 5. Built-in Funktionen Funktion dir dir(object) liefert alle Attribute und Methoden zu einem gegeben Objekt Funktion help help(object=„“) • Ohne Angabe eines Parameter wird die interaktive Hilfe gestartet • Bei Angabe eines Parameter wird die Hilfe zu diesem Objekt angezeigt Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 37 von 44 6. Module und Pakete Module und Pakete importieren Variante des Importes Erklärung import Mod1 Das Modul Mod1 wird importiert import Mod1, Mod2 Die Module Mod1 und Mod2 werden importiert import Mod1 as Name1 Mod1 wird unter dem Namen Name1 importiert from Mod1 import * Es wird alles aus Mod1 in den globalen Namensraum importiert from Mod1 import fkt1, fkt2 Es werden nur die Funktionen fkt1 und fkt2 in den globalen Namensraum importiert from Mod1 import fkt1 as Funktion1 Es wird nur die Funktionen fkt1 unter dem Namen Funktion1 in den globalen Namensraum importiert import math x=math.sin(math.pi) import math from math import sin as Sinus x=Sinus(math.pi) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 38 von 44 6. Module und Pakete eigene Module Module werden durch Dateien realisiert. Der Modulname entspricht dem Dateinamen. Die eigenen Module müssen im gleichen Ordner, wie das Hauptprogramm liegen. def fkt1(a, b) return a+b def fkt2(a, b) return a*b funktionen.py import funktionen c=funktionen.fkt(2,3) d=funktionen.fkt(2,3) print(c) print(d) #5 #6 Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 39 von 44 6. Module und Pakete Zusammenfassung von Modulen in Paketen Pakete werden durch Ordner realisiert. Der Paketname entspricht dem Ordnernamen. In jedem Ordner muss die Datei „__init__.py“ vorhanden sein from paket1.paket1 import modul1 from paket1 import paket1 from paket1 import modul1 from paket1 import modul2 from paket2 import modul1 Proseminar: Softwaretechnologie mit Python David Voigt import paket1 import paket2 print(paket1.modul2.fkt(2,3)) #5 18.11.2010 Folien 40 von 44 7. Weitere Spracheigenschaften List Comprehensions erstellt neue Liste aus einer oder mehreren Listen [neues_Element for Variable in Liste] [neues_Element for Variable in Liste if Bedingung] [neues_Element for Var1 in Liste1 for Var2 in Liste2] liste = [1, 2, 3, 4] liste2 = [x+2 for x in liste if x<4] print(liste2) #3, 4, 5 liste1 = [2, 4, 6, 8] liste2 = [1, 3, 4, 2] liste3 = [liste1[i]+liste2[i] for i in range(4)] print(liste3) #3, 7, 10, 10 ls1 = [1, 2] ls2 = [3, 4] ls3 = [a+b for a in ls1 for b in ls2] # 4, 5, 5, 6 Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 41 von 44 7. Weitere Spracheigenschaften Generatoren Generatoren sind Funktionen, welche eine Möglichkeit bieten Reihen von Werten zu verarbeiten. Das yield-Statement in der Generator-Funktion sorgt dafür, dass ein entsprechender Wert zurück gegeben wird und die Funktion an dieser Stelle fortgesetzt wird. def quad_gen(max): i=1 while i <= max: x = i*i yield x i = i+1 for i in quad_gen(3): print(i) def name_gen(more1): yield „Name1“ if more1==False: return yield „Name2“ yield „Name3“ Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 42 von 44 7. Weitere Spracheigenschaften Iteratoren Iteratoren sind Klassen, welche die Möglichkeit bieten Reihen von Werten zu verarbeiten. class Iteratorname(object) def __init__(self, Parameterliste): … def __iter__(self): … def __next__(self): if Bedingung: … else raise StopIteration class Iter: def __init__(self, max): self.max=max self.aktuell=0 def __iter__(self): return self def __next__(self): if self.aktuell<self.max: self.aktuell=self.aktuell+1 return self.aktuell+3 else: raise StopIteration for i in Iter(3): print(i) Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 43 von 44 Quellen • Python – Das umfassende Handbuch von Peter Kaise und Johannes Ernesti • http://www.python.org Proseminar: Softwaretechnologie mit Python David Voigt 18.11.2010 Folien 44 von 44