De nonlocal-instructie in Python
Er zijn gevallen waarin in een buitenste functie
een variabele aanwezig is, waartoe toegang nodig is
in de binnenste functie. Laten we in de
functie outer de variabele i declareren.
Ten opzichte van de binnenste functie is deze
variabele een niet-globale variabele (globaal
zijn alleen variabelen die worden gedeclareerd
in de buitenste code). En aan de functie inner
geven we de opdracht om i met één te verhogen:
def outer():
i = 0
def inner():
i += 1 # geeft een fout
inner()
return i
Voor inner is de variabele i
echter een lokale variabele, Python beschouwt deze als
ongedeclareerd en geeft een bijbehorende
foutmelding. Vroeger werd een dergelijke fout gecorrigeerd
met behulp van de instructie global. Echter,
hier is i een niet-globale variabele,
dus moet de instructie
nonlocal worden gebruikt. Deze neemt de opgesomde
variabelenamen in de dichtstbijzijnde scope,
exclusief de globale, d.w.z. i
binnen inner wordt overgenomen van de variabele
die boven deze functie is gedeclareerd:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # geeft 1
In de volgende code heeft een programmeur een fout gemaakt:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Wat is er mis met deze code? Vind en herstel de fout van de auteur van de code.
In de volgende code heeft een programmeur een fout gemaakt:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Wat is er mis met deze code? Vind en herstel de fout van de auteur van de code.