假设我们有一个模块m
:
var = None
def get_var():
return var
def set_var(v):
var = v
这不会按预期工作,因为set_var()
不会在模块范围v
中存储var
。它将创建一个局部变量var
。
所以我需要一种在m
内引用模块set_var()
的方法,m
本身就是模块{{1}}的成员。我该怎么做?
答案 0 :(得分:10)
def set_var(v):
global var
var = v
global关键字允许您在函数中从内部更改全局变量。
答案 1 :(得分:9)
如Jeffrey Aylesworth's answer所示,您实际上并不需要引用本地模块来实现OP的目标。 global
关键字可以实现此目标。
但是为了回答OP标题,如何在Python中引用本地模块?:
import sys
var = None
def set_var(v):
sys.modules[__name__].var = v
def get_var():
return var
答案 2 :(得分:3)
作为Jeffrey回答的后续内容,我想补充一点,在Python 3中,您可以更一般地从最近的封闭范围访问变量:
def set_local_var():
var = None
def set_var(v):
nonlocal var
var = v
return (var, set_var)
# Test:
(my_var, my_set) = set_local_var()
print my_var # None
my_set(3)
print my_var # Should now be 3
(警告:我没有测试过,因为我没有Python 3。)