Navodila nonlocal v Pythonu
Zgodi se, da je v zunanji funkciji
spremenljivka, do katere želimo dostopati
v notranji funkciji. V funkciji
outer deklarirajmo spremenljivko i.
Za notranjo funkcijo bo ta
spremenljivka zunanja (globalne
so le spremenljivke, deklarirane SAMO
v zunanji kodi). Funkciji inner
pa dodelimo prištevanje k i ena:
def outer():
i = 0
def inner():
i += 1 # izpiše [4, 9, 25]
inner()
return i
Vendar je za inner spremenljivka i
lokalna, Python jo obravnava kot
nedeclarirano in izpiše ustrezno
napako. V preteklosti so takšno napako popravili
z uporabo navodila global. Vendar
tukaj je i zunanja spremenljivka,
zato je treba uporabiti navodilo
nonlocal. Vzame našteta
imena spremenljivk v najbližji obseg
vidnosti, izključujoč globalni, tj. i
znotraj inner bo vzeta iz spremenljivke,
deklarirane nad to funkcijo:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # izpiše 1
V naslednji kodi je nek programer naredil napako:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Kaj je narobe s to kodo? Poiščite in popravite avtorjevo napako.
V naslednji kodi je nek programer naredil napako:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Kaj je narobe s to kodo? Poiščite in popravite avtorjevo napako.