24.02.2014 Aufrufe

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!