Python"全球"关键字不能与"来自...导入......"

时间:2015-01-19 12:23:05

标签: python global

我在Windows 8上使用Python 3.4.2版,我发现" global"关键字不适用于"来自...... import ..."

为了测试我编写了这样的代码:

# In test1.py
a = 1
def aPlusPlus():
  global a
  a += 1

和此:

# In test2.py
from test1 import *
print(a)
aPlusPlus()
print(a)

结果是:

> python3 test2.py
1
1

但是,如果我写import test1test1.atest1.aPlusPlus(),结果就是:

> python3 test2.py
1
2

为什么会这样?

1 个答案:

答案 0 :(得分:5)

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

a中设置test1,然后test.a名称重新绑定到新对象(2整数值),但是{{ 1}}引用不会被更新。

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