今天我在玩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'
为什么使用函数在模块中设置变量的值不起作用,但是使用“=”赋值?
答案 0 :(得分:0)
在你的setVal中,value
是该函数的本地,并且'消失了'当函数返回时。要使其成为模块的全局,您必须声明它。这将按照您的希望进行,即使它是不必要的(就像getVal())。
def setVal(new):
global value
value = new
答案 1 :(得分: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)和本地变量(等于参数new)。