4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Vorgabewerte – Besonderheiten<br />
1 def suche(seq,ele,start=0,ende=len(seq)):<br />
Gültigkeit<br />
2 for pos <strong>in</strong> range(start, ende):<br />
• Parametername während der<br />
3 ...<br />
Def<strong>in</strong>ition der Vorgabewerte noch nicht 4 Traceback (most recent call last):<br />
nutzbar<br />
5 File "", l<strong>in</strong>e 1, <strong>in</strong> <br />
• Umgehen durch Markieren mit None<br />
und dynamische Berechnung<br />
Lebenszyklus<br />
• Vorgabewert wird nur e<strong>in</strong>mal<br />
ausgewertet, bei der<br />
Funktionsdef<strong>in</strong>ition<br />
• Überraschungen bei änderbaren<br />
Vorgabewerten<br />
• Änderungen bleiben über Aufrufe<br />
h<strong>in</strong>weg enthalten<br />
• Vermeiden durch Markieren mit None<br />
und dynamische Berechnung<br />
6 NameError: name ’seq’ is not def<strong>in</strong>ed<br />
1 >>> def oh(l, a=[]):<br />
2 a.append("ende")<br />
3 return l+a<br />
4 >>> oh([1,2],[3,4])<br />
5 [1, 2, 3, 4, ’ende’]<br />
6 >>> oh([1,2],[3,4,5])<br />
7 [1, 2, 3, 4, 5, ’ende’]<br />
8 >>> oh([1,2])<br />
9 [1, 2, ’ende’]<br />
10 >>> oh([1,2])<br />
11 [1, 2, ’ende’, ’ende’]<br />
12 >>> oh([1,2])<br />
13 [1, 2, ’ende’, ’ende’, ’ende’]<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 181 / 326<br />
Parameterübergabe mit Schlüsselwort<br />
Ziel<br />
• Viele Vorgabewerte verwenden, aber<br />
e<strong>in</strong>ige Parameter anders<br />
• Zwang Angabe aller früheren<br />
Parameter auflösen<br />
Schlüsselwortparameter<br />
• Parameter über Namen zuweisen<br />
• Name des Parameters als l<strong>in</strong>ke Seite<br />
e<strong>in</strong>er Zuweisung im Aufruf<br />
• Reihenfolge der Parameter beliebig<br />
• Für alle Argumente außer den<br />
Schlüsselwortparametern Vorgabe<br />
• Parameter ohne Vorgabewert müssen<br />
als Positions- oder Schlüsselwortparameter<br />
übergeben werden<br />
1 def suche(seq, ele, start=0, ende=None):<br />
2 if ende is None:<br />
3 ende = len(seq)<br />
4 for pos <strong>in</strong> range(start, ende):<br />
5 if seq[pos] == ele:<br />
6 return pos<br />
1 >>> lis = [1, 2, 3, 4, 5, 6]<br />
2 >>> suche(lis, 2, start=0, ende=len(lis))<br />
3 1<br />
4 >>> suche(lis, 2, 0, len(lis))<br />
5 1<br />
6 >>> suche(lis, 2, ende=len(lis))<br />
7 1<br />
8 >>> suche(lis, 2, start=1, ende=len(lis))<br />
9 1<br />
10 >>> suche(lis, ende=len(lis), ele=2)<br />
11 1<br />
12 >>> suche(lis, 2, ende=1)<br />
13 >>><br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 182 / 326<br />
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Argumente sammeln mit * und **<br />
Weitere Positionsparameter *<br />
• E<strong>in</strong>e Variable am Ende kann mit e<strong>in</strong>em<br />
Stern * versehen werden<br />
• In dieser Variable werden dann alle<br />
weiteren Positionsparameter<br />
gesammelt als Tupel gesammelt<br />
• Realisiert beliebig viele Parameter, wie<br />
zum Beispiel pr<strong>in</strong>t<br />
Weitere Schlüsselwortparameter **<br />
• E<strong>in</strong>e Variable ganz am Ende kann mit<br />
zwei Sternen ** versehen werden<br />
11 SyntaxError: non-keyword arg after<br />
• Dar<strong>in</strong> werden alle weiteren<br />
12 keyword arg<br />
Schlüsselwortparameter als Dictionary<br />
gesammelt<br />
• Die Schlüssel s<strong>in</strong>d die<br />
Variablennamen als Str<strong>in</strong>gs<br />
1 def params(x, y, *pos, **key):<br />
2 pr<strong>in</strong>t x, y, pos, key<br />
1 >>> params(1, 2)<br />
2 1 2 () {}<br />
3 >>> params(1, 2, 3, 4, 5)<br />
4 1 2 (3, 4, 5) {}<br />
5 >>> params(1, 2, 3, 4, drei=3, vier=4)<br />
6 1 2 (3, 4) {’drei’: 3, ’vier’: 4}<br />
7 >>> params(1, 2, 3, 4, vier=4, fuenf=5)<br />
8 1 2 (3, 4) {’fuenf’: 5, ’vier’: 4}<br />
9 >>> params(1, 2, 3, fuenf=5, 4, vier=4)<br />
10 File "", l<strong>in</strong>e 1<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 183 / 326<br />
Funktionen <strong>in</strong> Funktionen und die LEGB-Regel<br />
Funktionsdef<strong>in</strong>itionen während<br />
Funktionsausführung<br />
• S<strong>in</strong>d erlaubt und s<strong>in</strong>nvoll<br />
• Umfassen aktuellen Namensraum und<br />
halten ihn fest (Enclos<strong>in</strong>g)<br />
• Von <strong>in</strong>nen nach außen<br />
LEGB-Regel<br />
• LGB-Regel erweitert<br />
• Zwischen Lokal und Global<br />
• Man sucht im umschließenden<br />
Namensraum, <strong>in</strong> dem die Funktion<br />
def<strong>in</strong>iert wurde<br />
• Dies ist entweder der globale<br />
Namensraum oder e<strong>in</strong> anderer<br />
Funktionsaufruf als Namensraum<br />
g 1 2 3<br />
e 6 5 3<br />
l 4 5 3<br />
e<strong>in</strong>geBaut<br />
1 x, y, z = 1, 2, 3<br />
2 def f():<br />
3 x, y = 4, 5<br />
4 def g():<br />
5 x = 6<br />
Global<br />
E<strong>in</strong>gekapselt<br />
Lokal<br />
6 pr<strong>in</strong>t "e", x, y, z # 6, 5, 3<br />
7 g()<br />
8 pr<strong>in</strong>t "l", x, y, z # 4, 5, 3<br />
9 pr<strong>in</strong>t "g", x, y, z # 1, 2, 3<br />
10 f()<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 184 / 326