[英]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.