Python のグローバル値について混乱しているだけです。ここに 2 つのコードがあります
#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)
クリコード
#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)
実行結果は
$ 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
ここで「function reset()」の実行後、グローバル値の結果が cli.py( cli 2: 150847672 1 ) では変化しないのに、gl.py に戻るとグローバル値が変化することがわかりません!!