从模块中的函数内访问模块级变量

时间:2011-08-15 00:30:30

标签: python

我希望能够做到这样的事情:

#mymodule
var = None

def load():
    var = something()

其他模块:

#secondmodule
import mymodule
mymodule.load()

#thirdmodule
from mymodule import var
print var #Shouldn't be None

但我不知道如何从模块中定义的函数引用模块变量。

这可能吗?或者我需要在每个我不想使用它的地方发布全球声明。 或者我完全错了?

2 个答案:

答案 0 :(得分:59)

只需更改

def load():
    global var
    var = something()

全局变量从兄弟方法是只读的。更准确地说,除非将变量指定为全局变量,否则Python会将其视为本地变量,但如果本地范围中不存在该名称,则对本地变量名称的读访问将达到模块级范围。

另请参阅use of “global” keyword in pythondoc,了解有关global声明的详情

答案 1 :(得分:15)

你似乎主要拥有它。您只缺少“模块级”变量在Python中称为全局变量的事实。 (换句话说,它们不是真正的全局性,而只是声明它们所声明的模块的全局性。)

修改全局变量的任何函数中(您希望使名称引用另一个对象),必须将其声明为global。因此,您的load()功能在开头需要global var。如果您只使用全局变量的值,或者它是一个可变类型(如列表)而您正在修改它,但不更改该名称所指向的对象,则无需将其声明为全局变量。

正如您所发现的,import语句是如何将模块级变量从一个模块导入另一个模块的。