esc*_*ram 9 python global-variables
我想在其他模块中使用全局变量,并将其值的变化"传播"到其他模块.
a.py:
x="fail"
def changeX():
global x
x="ok"
Run Code Online (Sandbox Code Playgroud)
b.py:
from a import x, changeX
changeX()
print x
Run Code Online (Sandbox Code Playgroud)
如果我运行b.py,我希望它打印"ok",但它确实打印"失败".
(运行python-2.7)
use*_*342 13
简而言之:如果不修改代码,就无法打印"ok".
from a import x, changeX 相当于:
import a
x = a.x
changeX = a.changeX
Run Code Online (Sandbox Code Playgroud)
换句话说,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
Run Code Online (Sandbox Code Playgroud)
您将获得更少杂乱的导入,更容易阅读代码(因为很明显标识符来自哪里而不查看导入列表),循环导入的问题较少(因为不是一次都需要所有标识符),并且更有可能reload工作喜欢工作.