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

今天我在玩弄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'
为什么使用函数在模块中设置变量的值无效,而使用=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: