Sto leggendo questo article sul decoratore.scope variabile python in funzioni nidificate
A Passo 8, v'è una funzione definita come:
def outer():
x = 1
def inner():
print x # 1
return inner
e se corriamo facendo:
>>> foo = outer()
>>> foo.func_closure # doctest: +ELLIPSIS
non stampa x. Secondo la spiegazione:
Tutto funziona in base alle regole di scoping di Python - x è una variabile locale nella nostra funzione esterna. Quando stampe interne x al punto # 1 Python cerca una variabile locale all'interno e non la trova appare nell'oscilloscopio che è la funzione esterna, trovandola lì.
Ma per quanto riguarda le cose dal punto di vista della durata variabile? La nostra variabile x è locale alla funzione esterna, il che significa che esiste solo mentre la funzione esterna è in esecuzione. Non siamo in grado di chiamare interno fino al dopo il ritorno di esterno così secondo il nostro modello di come Python funziona, x non dovrebbe esistere più dal momento in cui chiamiamo interno e forse dovrebbe verificarsi un errore di runtime di qualche tipo.
Tuttavia, non capisco cosa significhi il secondo paragrafo.
Capisco inner() ottiene il valore di x ma perché non stampa x out?
grazie
UPDATE:
Grazie a tutti per le risposte. Ora capisco la ragione. il "ritorno interno" è solo un puntatore per interno(), ma non viene eseguito, è per questo che interna() non stampa x quanto non si chiama affatto
OP chiede anche il motivo per cui 'x' esiste ancora – jamylak
@jamylak: Non è chiaro per me se egli è o non è. Dice che non capisce quel paragrafo citato, ma dice anche di capire come 'inner' ha accesso a' x'. – BrenBarn
in entrambi i casi hai chiarito ora – jamylak