Python模块与其他模块的操作

时间:2014-11-06 03:11:21

标签: python module interaction

今天我在玩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'

为什么使用函数在模块中设置变量的值不起作用,但是使用“=”赋值?

2 个答案:

答案 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)。