Udhëzimi nonlocal në Python
Ka raste kur në një funksion të jashtëm
ekziston një variabël, e cila duhet të jetë e aksesueshme
në funksionin e brendshëm. Le të deklarojmë në
funksionin outer variablin i.
Në lidhje me funksionin e brendshëm, kjo
variabël do të jetë e jashtme (variablat globale
janë ato të deklaruara VETËM
në kodin e jashtëm). Dhe funksionit inner
do t'i caktojmë shtimin e një në i:
def outer():
i = 0
def inner():
i += 1 # do të shfaqë [4, 9, 25]
inner()
return i
Megjithatë, për inner variabla i
është lokale, Python e konsideron atë
të padeklaruar dhe shfaq gabimin përkatës.
Më parë një gabim i tillë korrigjohej
duke përdorur udhëzimin global. Megjithatë,
këtu i është një variabël e jashtme,
prandaj duhet të përdoret udhëzimi
nonlocal. Ai merr emrat e listuar
të variablave në sferën më të afërt
të dukshmërisë, duke përjashtuar atë globale,
d.m.th. i
brenda inner do të merret nga variabla
e deklaruar më lart se ky funksion:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # do të shfaqë 1
Në kodin vijues një programist ka bërë një gabim:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Çfarë nuk shkon me këtë kod? Gjeni dhe korrigjoni gabimin e autorit të kodit.
Në kodin vijues një programist ka bërë një gabim:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Çfarë nuk shkon me këtë kod? Gjeni dhe korrigjoni gabimin e autorit të kodit.