Python全局变量似乎无法跨模块工作
问题内容:
码
我想在其他模块中使用全局变量,并将其值更改“传播”到其他模块。
a.py:
x="fail"
def changeX():
global x
x="ok"
b.py:
from a import x, changeX
changeX()
print x
如果我运行b.py,我希望它打印“确定”,但实际上却打印“失败”。
问题
- 这是为什么?
- 如何使它打印“确定”呢?
(运行python-2.7)
问题答案:
简而言之:如果不修改代码,则无法使其打印为“ ok”。
from a import x, changeX
等效于:
import a
x = a.x
changeX = a.changeX
换句话说,from a import x
不创建x
间接指向的a.x
,而是x
在b
模块中使用 当前
值创建一个新的全局变量a.x
。因此,以后的更改a.x
不会影响b.x
。
为了使您的代码按预期工作,只需将代码更改b.py
为import a
:
import a
a.changeX()
print a.x
您将减少混乱的导入,更易于阅读代码(因为无需查看导入列表即可清楚地知道哪个标识符来自何处),循环导入的问题更少(因为并非一次需要所有标识符),并且有更好的机会喜欢reload
工作的工具。