Python"global"关键字不适用于"from ... import ..."

xiG*_*nOU 0 python global

我在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)

为什么会这样?

Mar*_*ers 5

全局模块之间不共享全局.您的test2命名空间对其他模块中的1a引用有自己的独立引用.

设置atest1随后重新绑定test.a名称到一个新的对象(2整数),但test2.a基准是不会被更新.

如果要在模块之间共享数据,请使用可变对象; 例如,两个模块都可以引用相同listdict对象,然后可以在两个位置看到对存储那些可变结构中的值的更改.