簡體   English   中英

Python全局變量似乎不適用於模塊

[英]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”,但它確實打印“失敗”。

問題

  1. 這是為什么?
  2. 如何讓它打印“確定”呢?

(運行python-2.7)

簡而言之:如果不修改代碼,就無法打印“ok”。

from a import x, changeX相當於:

import a
x = a.x
changeX = a.changeX

換句話說, from a import x不創建一個間接到axx ,它在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM