2014-11-06 75 views
0

今天我在與Python模塊混戰,並且發現了一些有趣的東西;假設你有一個這樣的模塊:與其他模塊操作的Python模塊

# mymodule 

value = "default" 

def setVal(new): 
    value = new 

def getVal(): 
    return value 

現在,你有另一個模塊導入mymodule。當你在Python shell中運行的模塊,這種情況發生:

>>> moduleC.setC("newvalue") 
>>> moduleC.getC() 
'default' 
>>> moduleC.Cval = "new value" 
>>> moduleC.getC() 
'new value' 

爲什麼使用功能不能正常工作設置模塊中的變量的值,但使用「=」不分配呢?

+1

@TerryJanReedy在下面的答案中說得很好 - 在Python中,'setVal()'和'getVal()'都不是必須的。如果在模塊級別聲明瞭值,則可以使用「MyModule.value」訪問它,並根據需要進行更改。 Python不是Java :) – MattDMo 2014-11-06 03:34:43

回答

0

在你的setVal中,value對函數是局部的,當函數返回時會'消失'。要使其成爲模塊的全局,您必須聲明它。這會按照你的希望進行,儘管它是不必要的(就像getVal())一樣。

def setVal(new): 
    global value 
    value = new 
0

你可以運行下面的代碼,看看發生了什麼

value = 123 

def setVal(new): 
    value = new 
    print globals() 
    print locals() 

def getVal(): 
    return value 


setVal(22222) 
print getVal() 

然後:

value = 123 

def setVal(new): 
    global value 
    value = new 
    print globals() 
    print locals() 

def getVal(): 
    return value 


setVal(22222) 
print getVal() 

編輯:如果你想使用全局變量value在你的方法,只是宣佈你想使用的只是全球性的,而不是新創建的。如果不是,則會創建一個名爲value的局部變量,然後有兩個變量,名爲value - 全局變量(123)和本地變量(等於新參數)。

+0

介紹一下發生了什麼? – MattDMo 2014-11-06 03:26:02

+0

@MattDMo見我的編輯。 – tianwei 2014-11-06 03:28:16