Istruzione nonlocal in Python
Ci sono casi in cui in una funzione esterna
è presente una variabile a cui è necessario accedere
dalla funzione interna. Dichiariamo nella
funzione outer la variabile i.
Rispetto alla funzione interna, questa
variabile sarà esterna (sono globali
solo le variabili dichiarate
nel codice esterno). E alla funzione inner
assegniamo l'aggiunta di uno a i:
def outer():
i = 0
def inner():
i += 1 # darà [4, 9, 25]
inner()
return i
Tuttavia, per inner la variabile i
è locale, Python la considera
non dichiarata e restituisce il corrispondente
errore. In passato, un errore simile veniva corretto
usando l'istruzione global. Tuttavia
qui i è una variabile esterna,
quindi si dovrebbe usare l'istruzione
nonlocal. Prende i nomi elencati
delle variabili nell'ambito di visibilità
più vicino, escludendo quello globale,
cioè i
all'interno di inner sarà presa dalla variabile
dichiarata sopra questa funzione:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # darà 1
Nel codice seguente un programmatore ha commesso un errore:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Cosa non va in questo codice? Trovate e correggete l'errore dell'autore del codice.
Nel codice seguente un programmatore ha commesso un errore:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Cosa non va in questo codice? Trovate e correggete l'errore dell'autore del codice.