nur verwirrt über die globalen Wert in Python, hier zwei Stück Code sindWarum Reset Python globaler Wert wirksam nicht
#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)
der cli Code
#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)
Das Ergebnis der Ausführung ist
$ 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
Hier verstehe ich nicht nach der Ausführung von "function reset()", das Ergebnis des globalen Werts ändert sich nicht in cli.py (cli 2: 150847672 1), aber zurück zu gl.py, ändert sich der globale Wert !!
Ändern Sie den Import in "gl importieren" und beziehen Sie sich auf 'a' als' gl.a'. Die globale Variable ist nur in Bezug auf das Modul "gl" global. Ihr Import erstellt eine lokale Kopie. –
@Steven Das dachte ich mir auch, aber ein schneller Test zeigt, dass das nicht der Fall ist.Auch gute, interessante Frage von einem relativ neuen Benutzer - willkommen! – Voo
Aber warum muss es sich ändern? Sie sind import a = 1 und es ist Drucken 1. Versuchen Sie einfach zu verstehen, wie funktioniert unveränderliche Typen und wie ist Arbeitsreferenzierung und Garbage Collection. All diese finden Sie im ersten Teil von Mark Lutz Buch genannt wie "Bitten mit Python" oder etwas Ähnliches. – Denis