Python "global" 关键字不适用于 "from ... import ..."
Python "global" keyword doesn't work with "from ... import ..."
我在 Windows 8 上使用 Python 版本 3.4.2,我发现 "global" 关键字不适用于 "from ... 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
为什么会这样?
模块之间不共享全局变量。您的 test2
命名空间在另一个模块中获得了对 1
值 a
引用的独立引用。
在 test1
中设置 a
然后 将 名称 test.a
重新绑定到新对象(2
整数值) ,但 test2.a
参考不会更新。
如果要在模块之间共享数据,请使用可变对象;例如,两个模块都可以引用相同的 list
或 dict
对象,然后可以在两个位置看到对存储在 中 中的值的更改。 =20=]
我在 Windows 8 上使用 Python 版本 3.4.2,我发现 "global" 关键字不适用于 "from ... 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
为什么会这样?
模块之间不共享全局变量。您的 test2
命名空间在另一个模块中获得了对 1
值 a
引用的独立引用。
在 test1
中设置 a
然后 将 名称 test.a
重新绑定到新对象(2
整数值) ,但 test2.a
参考不会更新。
如果要在模块之间共享数据,请使用可变对象;例如,两个模块都可以引用相同的 list
或 dict
对象,然后可以在两个位置看到对存储在 中 中的值的更改。 =20=]