Příkaz nonlocal v Pythonu
Nastávají případy, kdy ve vnější funkci
je proměnná, ke které je potřeba získat
přístup ve vnitřní funkci. Deklarujme ve
funkci outer proměnnou i.
Ve vztahu k vnitřní funkci bude tato
proměnná vnější (globálními
jsou proměnné deklarované POUZE
ve vnějším kódu). A funkci inner
nastavme přičtení k i jedničku:
def outer():
i = 0
def inner():
i += 1 # vypíše [4, 9, 25]
inner()
return i
Avšak pro inner je proměnná i
lokální, Python ji považuje za
nedeklarovanou a vypisuje odpovídající
chybu. Dříve se podobná chyba opravovala
pomocí příkazu global. Avšak
zde je i vnější proměnná,
proto je třeba použít příkaz
nonlocal. Ten bere uvedené
názvy proměnných z nejbližšího rozsahu
viditelnosti, kromě globálního, tj. i
uvnitř inner bude brána z proměnné,
deklarované výše než tato funkce:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # vypíše 1
V následujícím kódu nějaký programátor udělal chybu:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Co je špatně s tímto kódem? Najděte a opravte chybu autora kódu.
V následujícím kódu nějaký programátor udělal chybu:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Co je špatně s tímto kódem? Najděte a opravte chybu autora kódu.