为什么重置python全局值不会生效

lin*_*nbo 11 python global

只是对Python中的全局价值感到困惑,这里有两段代码

#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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

执行的结果是

$ 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
Run Code Online (Sandbox Code Playgroud)

这里我不明白"function reset()"执行后,全局值的结果在cli.py(cli 2:150847672 1)中没有变化,但回到gl.py,全局值确实发生了变化!

Joh*_*ooy 2

您的gl模块被导入到两个不同的命名空间中两次

尝试这个:

import sys
print sys.modules['__main__'].a
print sys.modules['gl'].a
Run Code Online (Sandbox Code Playgroud)