Die nonlocal-Anweisung in Python
Es gibt Fälle, in denen es in einer äußeren Funktion
eine Variable gibt, auf die man in der inneren Funktion
zugreifen können muss. Deklarieren wir in
der Funktion outer die Variable i.
In Bezug auf die innere Funktion wird diese
Variable eine äußere sein (global sind
nur die Variablen, die AUSSCHLIESSLICH
im äußeren Code deklariert sind). Und der Funktion inner
weisen wir das Addieren von eins zu i zu:
def outer():
i = 0
def inner():
i += 1 # gibt [4, 9, 25] aus
inner()
return i
Allerdings ist für inner die Variable i
eine lokale Variable, Python betrachtet sie als
undeklariert und gibt einen entsprechenden
Fehler aus. Früher wurde ein solcher Fehler
mit der Anweisung global behoben. Allerdings
ist i hier eine äußere Variable,
daher sollte die Anweisung
nonlocal verwendet werden. Sie nimmt die aufgezählten
Namen der Variablen aus dem nächstgelegenen Gültigkeitsbereich,
ausschließlich des globalen, d.h. i
innerhalb von inner wird von der Variable genommen,
die oberhalb dieser Funktion deklariert wurde:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # gibt 1 aus
Im folgenden Code hat ein gewisser Programmierer einen Fehler gemacht:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Was ist falsch an diesem Code? Finden und korrigieren Sie den Fehler des Code-Autors.
Im folgenden Code hat ein gewisser Programmierer einen Fehler gemacht:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Was ist falsch an diesem Code? Finden und korrigieren Sie den Fehler des Code-Autors.