/ / confuso da python3 closure [duplicato] - python, python-3.x, chiusure

confuso da python3 closure [duplicato] - python, python-3.x, chiusure

questo codice

def gen(x):
def f():
return x

return f

print(gen(1)())

funziona bene.

ma quando eseguo questo codice,

def gen(x):
def f():
x += 1
return x

return f

print(gen(1)())

Ho ricevuto un messaggio di errore

UnboundLocalError: variabile locale "x" a cui si fa riferimento prima dell'assegnazione

cosa gli è successo? e Come capire la chiusura di python3.

risposte:

2 per risposta № 1
def gen(x):
def f():
nonlocal x # add this line
x += 1
return x

return f

print(gen(1)())