2011-06-20 153 views
3

比方說,我有以下文件:導入全局命名空間在Python

a.py

glo_var = 0 
def func(): 
    global glo_var 
    glo_var = 5 
    print "A %d" % (glo_var) 

b.py

from a import * 
func() 
print "B %d" % (glo_var) 

如果我跑b.py輸出爲:

A 5 
B 0 

我的問題是,如何導入t他的全局命名空間,因此輸出將是

A 5 
B 5 

我需要調用函數從b.py模塊a.py所以它會影響全局。

我不想使用常規的「進口」,但使用這種方式,「從進口*」

+3

請不要在真實的代碼中做到這一點。人們會恨你。 –

+0

A的輸出值必須爲'0'而不是'5'。 –

回答

3

使用from ... import ...複製引用從另一模塊。重新綁定原始值會使其具有新的參考,從而永久性地斷開a.glo_varb.glo_var之間的鏈接。使用可變對象並對其進行變異,或者在需要更新值時重新導入a.glo_var

+0

感謝您的快速回答,請使用可變對象解釋您的解決方案。 –

+0

在a.py中使用例如'glo_var = [0]'。然後,只需讀/寫'glo_var [0]'而不是重新命名該名稱。 –