4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Gültigkeitsbereiche <strong>in</strong> Funktionen<br />
Gültigkeitsbereiche <strong>in</strong> Funktionen – Durchgriff<br />
Funktionsaufrufe s<strong>in</strong>d Namensraum<br />
• Jeder Funktionsaufruf bietet e<strong>in</strong>en<br />
neuen Gültigkeitsbereich<br />
(Namensraum)<br />
• Die Def<strong>in</strong>ition auch<br />
Beispiel f, g<br />
• Variable g wird nicht verändert<br />
• Weder bei der Def<strong>in</strong>ition<br />
• Noch bei dem Aufruf<br />
• g <strong>in</strong> der Funktion ist e<strong>in</strong>e neue lokale<br />
Variable<br />
1 >>> g = 1<br />
2 >>> def f(x, y):<br />
3 g=2<br />
4 return x+y<br />
5<br />
6 >>> g<br />
7 1<br />
8 >>> f(5, 6)<br />
9 11<br />
10 >>> g<br />
11 1<br />
Durchgriff auf globale Variable<br />
• Schlüsselwort global<br />
• Variable vom “globalen” Namensraum<br />
wird verwendet<br />
• Durchgriff immer nur auf äußerste<br />
“globale” Ebene möglich<br />
• Wenn möglich vermeiden*<br />
1 >>> g = 1<br />
2 >>> def f(x, y):<br />
3 global g<br />
4 g=2<br />
5 return x+y<br />
6<br />
7 >>> g<br />
8 1<br />
9 >>> f(5, 6)<br />
10 11<br />
11 >>> g<br />
12 2<br />
*Bei OpenGL muss man dann leider doch mal ab<br />
und zu. . .<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 173 / 326<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 174 / 326<br />
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Programmieren <strong>in</strong> Python<br />
Funktionen<br />
Gültigkeitsbereiche Funktionen – Überschreiben<br />
Überschreiben Global/lokal Eigenschaft<br />
• Überschreiben der global/lokal<br />
Eigenschaft nicht möglich<br />
• In f1 ist g als Parameter lokal, kann<br />
nicht auch global se<strong>in</strong><br />
Nur lesen automatisch möglich<br />
• Direkter Zugriff auf globalen<br />
Namensraum möglich wie <strong>in</strong> f2<br />
• Syntaktisch ok, stilistisch unschön<br />
Nachträglich global machen<br />
• Wenn vorher nur gelesen wurde, dann<br />
wurde globaler Wert gelesen, f3<br />
• Wenn vorher geschrieben wurde, dann<br />
geht lokaler Wert verloren, f4<br />
• Warnung: unschön, vermeiden<br />
1 >>> def f1(x, g):<br />
2 global g<br />
3 SyntaxError: name ’g’ is local and global<br />
1 >>> g = 1<br />
2 >>> def f2(x, y):<br />
3 return g+1<br />
4 >>> f2(5, 6)<br />
5 2<br />
1 >>> def f3(x):<br />
2 y = g<br />
3 global g<br />
4 SyntaxWarn<strong>in</strong>g: name ’g’ is used<br />
5 prior to global declaration<br />
6 >>> def f4(x):<br />
7 g = 3<br />
8 global g<br />
9 SyntaxWarn<strong>in</strong>g: name ’g’ is<br />
10 assigned to before global<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 175 / 326<br />
Regeln für Gültigkeitsbereiche<br />
Lokal<br />
• Jeder Funktionsaufruf bietet e<strong>in</strong>en<br />
neuen lokalen Gültigkeitsbereich<br />
(Namensraum)<br />
• Jeder Aufruf, Rekursion funktioniert<br />
• Zugewiesene Namen s<strong>in</strong>d lokal im<br />
aktuellen Gültigskeitsbereich<br />
• können explizit global werden<br />
• Blöcke (E<strong>in</strong>rückungen) s<strong>in</strong>d ke<strong>in</strong><br />
eigener Gültigkeitsbereich<br />
Global<br />
• Das e<strong>in</strong>schließende Modul ist e<strong>in</strong><br />
globaler Gültigkeitsbereich<br />
• Der <strong>in</strong>teraktive Modus ist e<strong>in</strong> Modul,<br />
hat den Namen ’__ma<strong>in</strong>__’<br />
Reservierte Namen s<strong>in</strong>d Teil der Sprache<br />
Reserviert<br />
Modul<br />
Modul<br />
Funktionsdef<strong>in</strong>ition<br />
Funktionsaufruf<br />
Funktionsaufruf<br />
Funktionsaufruf<br />
Funktionsaufruf<br />
Funktionsdef<strong>in</strong>ition<br />
Funktionsdef<strong>in</strong>ition<br />
Funktionsaufruf<br />
Funktionsaufruf<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 176 / 326