Instrucțiunea nonlocal în Python
Există cazuri când într-o funcție exterioară
există o variabilă la care trebuie să obținem
acces din funcția interioară. Să declarăm în
funcția outer variabila i.
În raport cu funcția interioară, această
variabilă va fi una exterioară (variabilele globale
sunt cele declarate DOAR
în codul exterior). Iar funcției inner
îi vom atribui adăugarea unei unități la i:
def outer():
i = 0
def inner():
i += 1 # va afișa [4, 9, 25]
inner()
return i
Cu toate acestea, pentru inner variabila i
este una locală, Python o consideră
nedecimalrată și afișează eroarea corespunzătoare.
În trecut, o astfel de eroare era corectată
cu ajutorul instrucțiunii global. Totuși,
aici i este o variabilă exterioară,
prin urmare ar trebui să folosim instrucțiunea
nonlocal. Ea preia numele de variabile enumerate
din domeniul de vizibilitate cel mai apropiat,
excluzând pe cel global, adică i
în interiorul inner va fi preluată din variabila
declarată înainte de această funcție:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # va afișa 1
În următorul cod, un anumit programator a făcut o greșeală:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Ce nu este în regulă cu acest cod? Găsiți și corectați greșeala autorului codului.
În următorul cod, un anumit programator a făcut o greșeală:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Ce nu este în regulă cu acest cod? Găsiți și corectați greșeala autorului codului.