Príkaz nonlocal v Pythone
Nastávajú prípady, keď vo vonkajšej funkcii
je premenná, ku ktorej je potrebné získať
prístup vo vnútornej funkcii. Deklarujme vo
funkcii outer premennú i.
Voči vnútornej funkcii bude táto
premenná predstavovať vonkajšiu (globálnymi
sú premenné deklarované LEN
vo vonkajšom kóde). A funkcii inner
nastavme pričítanie k i jednotku:
def outer():
i = 0
def inner():
i += 1 # vypíše [4, 9, 25]
inner()
return i
Avšak pre inner je premenná i
lokálnou, Python ju považuje za
nedeklarovanú a vypíše zodpovedajúcu
chybu. Predtým sa takáto chyba riešila
pomocou príkazu global. Avšak
tu i je vonkajšou premennou,
preto by sa mala použiť inštrukcia
nonlocal. Tá vezme vymenované
mená premenných do najbližšej oblasti
viditeľnosti, s výnimkou globálnej, t.j. i
vo vnútri inner bude braná z premennej,
deklarovanej vyššie ako táto funkcia:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # vypíše 1
V nasledujúcom kóde nejaký programátor urobil chybu:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Čo je zlé s týmto kódom? Nájdite a opravte chybu autora kódu.
V nasledujúcom kóde nejaký programátor urobil chybu:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Čo je zlé s týmto kódom? Nájdite a opravte chybu autora kódu.