Sie erhalten, weil from foo import OPTIONS
Linie in get_options()
Funktion einen neuen lokalenOPTIONS Variable in einem Speicher, dessen Wert lädt ist { 'x': 0}. Aber wenn Sie diese Zeile entfernen/kommentieren, dann haben Sie Ihr erwartetes Ergebnis, weil OPTIONS Variable in get_options()
ist jetzt eine globale Variable, kein lokal.
OPTIONS = {'x': 0}
def get_option(key):
# from foo import OPTIONS
return OPTIONS[key]
if __name__ == '__main__':
OPTIONS['x'] = 1
print("OPTIONS['x'] is %d" % OPTIONS['x'])
print("get_option('x') is %d" % get_option('x'))
Sie können auch debuggen, dass die id() Funktion unter Verwendung, die die „Identität“ eines Objekts zurückgibt während es Lebensdauer ist.
Für, dass die Debugging-Code ist:
OPTIONS = {'x': 0}
def get_option(key):
from foo import OPTIONS
print("Id is %d in get_option" % id(OPTIONS))
return OPTIONS[key]
if __name__ == '__main__':
OPTIONS['x'] = 1
print("Id is %d in main" % id(OPTIONS))
print("OPTIONS['x'] is %d" % OPTIONS['x'])
print("get_option('x') is %d" % get_option('x'))
Ausgang:
Id is 140051744576688 in main
OPTIONS['x'] is 1
Id is 140051744604240 in get_option
get_option('x') is 0
Anmerkung: Werte von IDs können auf dem System geändert werden.
Jetzt können Sie die IDs unterscheidet sich sowohl in Ort sehen, bedeutet dies, dass es zwei OPTIONS innerhalb get_options()
Funktion ein __main__.OPTIONS
und andere ist ist foo.OPTIONS
. Aber, wenn Kommentar/Zeile from foo import OPTIONS
in get_options()
entfernen, erhalten Sie die gleiche ID an beiden Orten.
Sie haben zwei 'OPTION's,' __main __. OPTIONS' und 'foo.OPTIONS'. – user2357112
OPTIONS in __main__ ist in Locals(), aber OPTIOINS in get_option ist in globals() –