我在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 test1
,test1.a
和test1.aPlusPlus()
,结果就是:
> python3 test2.py
1
2
为什么会这样?
答案 0 :(得分:5)
模块之间不共享全局。您的test2
命名空间对其他模块中的1
值a
引用有自己独立的引用。
在a
中设置test1
,然后将test.a
名称重新绑定到新对象(2
整数值),但是{{ 1}}引用不会被更新。
如果要在模块之间共享数据,请使用可变对象;例如,两个模块都可以引用相同的test2.a
或list
对象,并且可以在两个位置看到对那些可变结构中存储的值的更改。