[英]Python module manipulation with other modules
我今天在鬼混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'
為什么在使用函數的模塊中設置變量的值不起作用,但是使用“ =”分配變量呢?
在setVal中, value
是該函數的局部value
,並且在該函數返回時“消失”。 要使其對模塊是全局的,必須這樣聲明。 即使它是不必要的,這也將按照您希望的那樣進行(與getVal()一樣)。
def setVal(new):
global value
value = new
您可以運行下面的代碼,看看發生了什么
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)和局部變量(等於參數new)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.