Nonlocal instruktsioon Pythonis
On juhtumeid, kui välimises funktsioonis
on muutuja, millele peab saama juurdepääsu
sisemises funktsioonis. Deklareerime funktsioonis
outer muutuja i.
Sisemise funktsiooni suhtes on see
muutuja väline (globaalsed
on muutujad, mis on deklareeritud AINULT
välimises koodis). Ja funktsioonile inner
paneme ühe liitmise i-le:
def outer():
i = 0
def inner():
i += 1 # annab vea
inner()
return i
Kuid inner jaoks on muutuja i
lokaalne, Python peab seda
deklareerimata ja annab vastava
vea. Varem parandati sellist viga
instruktsiooni global abil. Kuid
siin on i väline muutuja,
seega tuleks kasutada instruktsiooni
nonlocal. See võtab loetletud
muutujanimed lähimast ulatusest,
välistades globaalse, st i
inner sees võetakse muutujast,
mis on deklareeritud selle funktsiooni kohal:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # väljastab 1
Järgmises koodis tegi mõni programmeerija vea:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Mis selle koodiga on valesti? Leidke ja parandage koodi autorit viga.
Järgmises koodis tegi mõni programmeerija vea:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Mis selle koodiga on valesti? Leidke ja parandage koodi autorit viga.