2014-10-09 34 views
1

我很困惑,如果你將模塊作爲單例使用,會發生什麼。導入如何用作單例使用的模塊?

說我有一個模塊conf.py,其中包含一些配置參數,需要由多個其他文件訪問。在conf.py,我可能有這樣的一段代碼(沒有別的):

myOption = 'foo' + 'bar' 

如果我現在在a.py先導入它,然後在b.py,我的理解是,第一次它被導入(在a.py中),字符串連接將被執行。但是第二次導入時(在b.py中),conf.myOption已經有了它的值,所以不會執行字符串連接。它是否正確?

如果做這兩個進口後,我再執行在b.py

conf.myOption = 'aDifferentFoobar' 

以下則顯然b.py現在會看到這個新的價值。 a.py會看到相同的值,還是會看到'foobar'?

我相信(但糾正我,如果我錯了),進口總是引用參考,而不是價值?我猜這就是以上問題歸結到的。

+2

好問題,但沒有你試試吧;) – 2014-10-09 09:53:10

+0

好點,但我還是有點擔心可能有角的情況下是不明顯... – funklute 2014-10-09 10:20:02

回答

1

試試看:

mod.py

def foo(): 
    print("in foo()") 
    return "foo" 

bar = foo() 
opt = "initial" 

b.py

import mod 

mod.opt = "changed" 

a.py

import mod 
import b 

print(mod.bar) 
print(mod.opt) 

執行a.py

$ python3.4 a.py 

輸出:

in foo() 
foo 
changed 

我們學習:

  • foo()只執行一次
  • mod.optb.py
  • a.py變化看到了改變的值mod.opt
  • 獎金:中import S IN a.py的順序並不重要