Python模块与其他模块的操作
今天我在玩弄python模块,发现了一些有趣的东西;假设您有这样一个模块:Python模块与其他模块的操作,python,module,interaction,Python,Module,Interaction,今天我在玩弄python模块,发现了一些有趣的东西;假设您有这样一个模块: # mymodule value = "default" def setVal(new): value = new def getVal(): return value 现在,您有了另一个导入mymodule的模块。在python shell中运行模块时,会发生以下情况: >>> moduleC.setC("newvalue") >>> moduleC.getC
# 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'
为什么使用函数在模块中设置变量的值无效,而使用=does赋值?在setVal中,值是函数的局部值,并且在函数返回时“消失”。要使其成为模块的全局,必须将其声明为全局。这将如您所希望的那样执行,尽管它与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的变量-全局变量123和与参数new相等的局部变量。@MattDMo请参见我的编辑。@TerryJanReedy在下面的回答中提出了一个很好的观点-在Python中,setVal和getVal都不是必需的。如果值是在模块级别声明的,则可以使用MyModule.value访问它,并根据需要进行更改。Python不是Java: