2011-06-20 102 views
3

比方说,我有以下文件:导入全局命名空间在Python

a.py

glo_var = 0 
def func(): 
    global glo_var 
    glo_var = 5 
    print "A %d" % (glo_var) 

b.py

from a import * 
func() 
print "B %d" % (glo_var) 

如果我跑b.py输出为:

A 5 
B 0 

我的问题是,如何导入t他的全局命名空间,因此输出将是

A 5 
B 5 

我需要调用函数从b.py模块a.py所以它会影响全局。

我不想使用常规的“进口”,但使用这种方式,“从进口*”

+3

请不要在真实的代码中做到这一点。人们会恨你。 –

+0

A的输出值必须为'0'而不是'5'。 –

回答

3

使用from ... import ...复制引用从另一模块。重新绑定原始值会使其具有新的参考,从而永久性地断开a.glo_varb.glo_var之间的链接。使用可变对象并对其进行变异,或者在需要更新值时重新导入a.glo_var

+0

感谢您的快速回答,请使用可变对象解释您的解决方案。 –

+0

在a.py中使用例如'glo_var = [0]'。然后,只需读/写'glo_var [0]'而不是重新命名该名称。 –