solo confuso circa il valore globale in Python, qui ci sono due pezzi di codicePerché ripristino pitone valore globale non ha effetto
#gl.py
import cli
a = 1
print "gl 1: %d %d" % (id(a), a)
def reset():
global a
a = 7
print "reset 1: %d %d" % (id(a), a)
if __name__ == '__main__':
cli.handler(reset)
print "gl 2: %d %d" % (id(a), a)
il codice cli
#cli.py
def handler(func):
from gl import a
print "cli 1: %d %d" % (id(a), a)
func()
print "cli 2: %d %d" % (id(a), a)
Il risultato dell'esecuzione è
$ python gl.py
gl 1: 150847672 1
gl 1: 150847672 1
cli 1: 150847672 1
reset 1: 150847600 7
cli 2: 150847672 1 #Why value doesn't change
gl 2: 150847600 7
Qui non riesco a capire dopo l'esecuzione di "function reset()", il risultato del valore globale non cambia in cli.py (cli 2: 150847672 1), ma torna a gl.py, il valore globale cambia !!
Cambiare l'importazione in 'import gl' e fare riferimento a' a' come 'gl.a'. La variabile globale è globale solo rispetto al modulo 'gl'. L'importazione esegue una copia locale. –
@Steven L'ho pensato anch'io, ma un rapido test dimostra che non è così.Anche una buona domanda interessante da un utente relativamente nuovo - benvenuto! – Voo
Ma perché è necessario cambiare? Si importano a = 1 e si stampa 1. Basta provare a capire come funziona i tipi immutabili e come funziona la referenziazione e la garbage collection. Intere di queste si possono trovare nella prima parte del libro di Mark Lutz chiamato "Begging with python" o qualcosa di simile. – Denis