python中没有真正的全局变量。对象被绑定到命名空间中的变量,并且
global关键字引用当前 模块的 命名空间。
from somemoduleimport *在当前模块的名称空间中创建新变量,并将它们引用到 somemodule
的对象。现在,您有两个不同的变量指向同一个对象。如果您重新绑定其中一个变量,则其他变量将继续引用原始对象。此外,function.s的“全局”命名空间是在其定义的模块,即使将其导入到其他模块也是如此。
如果需要“全局”变量,请导入模块并使用其名称空间限定名称,而不是在本地名称空间中重新绑定各个变量。
这是一个带注释的示例…
cfg.py
var = 10somelist = []var2 = 1def show_var2(): print var2
main.py
import cfgfrom cfg import * # bind objects referenced by variables in cfg to # like-named variables in this module. These objects # from 'cfg' now have an additional reference hereif __name__ == '__main__': print cfg.var, var var = 20 # rebind this module's 'var' to some other value. # this does not affect cfg's 'var' print cfg.var, var print '----' print cfg.somelist, somelist somelist.append(1) # update this module's 'somelist' # since we updated the existing object, all see it print cfg.somelist, somelist print '----' var2 = 2 print var2, cfg.var2, show_var2() # show_var2 is in cfg.py and uses its # namespace even if its been imported # elsewhere



