[英]Python global variables don't seem to work across modules
我想在其他模块中使用全局变量,并将其值的变化“传播”到其他模块。
a.py:
x="fail"
def changeX():
global x
x="ok"
b.py:
from a import x, changeX
changeX()
print x
如果我运行b.py,我希望它打印“ok”,但它确实打印“失败”。
(运行python-2.7)
简而言之:如果不修改代码,就无法打印“ok”。
from a import x, changeX
相当于:
import a
x = a.x
changeX = a.changeX
换句话说, from a import x
不创建一个间接到ax
的x
,它在b
模块中创建一个新的全局变量x
,其当前值为ax
。 由此可见,后来对ax
更改不会影响bx
。
要使代码按预期工作,只需更改b.py
的代码即可import a
:
import a
a.changeX()
print a.x
您将获得更少杂乱的导入,更容易阅读代码(因为很清楚标识符来自哪里而不查看导入列表),循环导入的问题较少(因为不是一次都需要所有标识符),并且更有可能像reload
工作的工具。
您也可以使用可变容器,例如list:
a.py
x = ['fail']
def changeX():
x[0] = 'ok'
b.py
from a import changeX, x
changeX()
print x[0]
您还可以在changeX
之后添加另一个import语句。 这会将代码从b.py转换为
from a import x, changeX
changeX()
from a import x
print x
这说明通过调用changeX
,只更改了模块a
x
。 再次导入它,将更新后的值再次绑定到标识符x
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.