我希望能够做到这样的事情:
#mymodule
var = None
def load():
var = something()
其他模块:
#secondmodule
import mymodule
mymodule.load()
#thirdmodule
from mymodule import var
print var #Shouldn't be None
但我不知道如何从模块中定义的函数引用模块变量。
这可能吗?或者我需要在每个我不想使用它的地方发布全球声明。 或者我完全错了?
答案 0 :(得分:59)
只需更改
def load():
global var
var = something()
全局变量从兄弟方法是只读的。更准确地说,除非将变量指定为全局变量,否则Python会将其视为本地变量,但如果本地范围中不存在该名称,则对本地变量名称的读访问将达到模块级范围。
另请参阅use of “global” keyword in python和doc,了解有关global
声明的详情
答案 1 :(得分:15)
你似乎主要拥有它。您只缺少“模块级”变量在Python中称为全局变量的事实。 (换句话说,它们不是真正的全局性,而只是声明它们所声明的模块的全局性。)
在修改全局变量的任何函数中(您希望使名称引用另一个对象),必须将其声明为global。因此,您的load()
功能在开头需要global var
。如果您只使用全局变量的值,或者它是一个可变类型(如列表)而您正在修改它,但不更改该名称所指向的对象,则无需将其声明为全局变量。
正如您所发现的,import
语句是如何将模块级变量从一个模块导入另一个模块的。