Nonlocal-käsky Pythonissa
On tilanteita, joissa ulkoisessa funktiossa
on muuttuja, johon sisäisessä funktiossa
tarvitaan pääsy. Esitellään funktiossa
outer muuttuja i.
Sisäiseen funktioon nähden tämä
muuttuja on ulkoinen (globaaleja
ovat vain ulkoisessa koodissa esitellyt
muuttujat). Ja funktiolle inner
asetaan yhden lisääminen i:hin:
def outer():
i = 0
def inner():
i += 1 # tulostaa [4, 9, 25]
inner()
return i
Kuitenkin inner:lle muuttuja i
on paikallinen, Python pitää sitä
esittelemättömänä ja tulostaa vastaavan
virheen. Aikaisemmin tällainen virhe korjattiin
global-käskyllä. Kuitenkin
tässä i on ulkoinen muuttuja,
joten tulisi käyttää nonlocal-käskyä.
Se ottaa luetellut muuttujien nimet lähimpään
näkyvyysalueeseen, pois lukien globaalin, eli i
inner:n sisällä otetaan muuttujasta,
joka on esitelty ylempänä kuin tämä funktio:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # tulostaa 1
Seuraavassa koodissa eräs ohjelmoija teki virheen:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Mikä on vialla tässä koodissa? Etsi ja korjaa koodin tekijän virhe.
Seuraavassa koodissa eräs ohjelmoija teki virheen:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Mikä on vialla tässä koodissa? Etsi ja korjaa koodin tekijän virhe.