2017-08-06 67 views
-1

我試圖讓更改的變量影響另一個模塊。其他模塊似乎沒有注意到這一變化。另一個模塊中的更改變量不會更新

a.py:

import b 

b.changeMyVar() 
print(b.myVar["key"]) 

b.py:

myVar = {"key": "foo"} 

def changeMyVar(): 
    myVar["key"] = "value" 

我期待(上運行a.py)什麼:

value 

我能得到什麼:

foo 

我該如何做這項工作?爲什麼它不起作用?如果myVar是一個由changeMyVar(這兩種情況都發生在我的程序中)突變的字典,情況會不同嗎?

請注意我沒有寫from b import *,這是我理解的邪惡。

編輯1:正如評論者指出的,如果myVar是不可變的對象,沒有global myVar,這將無法正常工作。我改變了這個例子以更好地反映我的意思。

編輯2:我忘了添加b.但是,我的問題沒有改變。變量已定義,但運行時更改從其他模塊不可見。我再次編輯了代碼來澄清我的問題。

+0

這不是在同一模塊級連工作更不用說跨模塊。 –

+0

函數定義一個範圍... –

+2

用你的新代碼,我希望你得到'NameError:name'changeMyVar'未定義' –

回答

2

import b不會導入myVarchangeMyVar到a.py的範圍,它只定義了引用該模塊的名稱b

所以,你必須使用的名稱b訪問myVarchangeMyVar()在a.py:

import b 

b.changeMyVar() 
print(b.myVar["key"]) 
+0

種類。整個'b'模塊被導入,但添加到'a'命名空間的唯一名稱是'b'。 –

相關問題