我在Windows 8上使用Python版本3.4.2,我发现"global"关键字不适用于"from ... import ..."
为了测试,我写了这样的代码:
# In test1.py
a = 1
def aPlusPlus():
global a
a += 1
Run Code Online (Sandbox Code Playgroud)
还有这个:
# In test2.py
from test1 import *
print(a)
aPlusPlus()
print(a)
Run Code Online (Sandbox Code Playgroud)
结果是:
> python3 test2.py
1
1
Run Code Online (Sandbox Code Playgroud)
但是,如果我写import test1,test1.a并且test1.aPlusPlus(),结果是:
> python3 test2.py
1
2
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
全局模块之间不共享全局.您的test2命名空间对其他模块中的1值a引用有自己的独立引用.
设置a在test1随后重新绑定的test.a名称到一个新的对象(2整数),但test2.a基准是不会被更新.
如果要在模块之间共享数据,请使用可变对象; 例如,两个模块都可以引用相同list或dict对象,然后可以在两个位置看到对存储在那些可变结构中的值的更改.