如何在Python中引用本地模块?
假设我们有一个模块叫做 m
:
var = None
def get_var():
return var
def set_var(v):
var = v
这样做不会按预期工作,因为 set_var()
并不会把 v
存储到模块范围内的 var
里。它会创建一个局部变量 var
。
所以我需要一种方法,在 set_var()
这个函数内部引用模块 m
,因为 set_var()
本身是模块 m
的一部分。我该怎么做呢?
3 个回答
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。)
10
def set_var(v):
global var
var = v
global关键字可以让你在一个函数里面修改全局变量。
9
正如Jeffrey Aylesworth的回答所示,其实你并不需要引用本地模块就能实现提问者的目的。使用global
这个关键词就可以达到这个效果。
不过为了回答提问者的标题,如何在Python中引用本地模块?:
import sys
var = None
def set_var(v):
sys.modules[__name__].var = v
def get_var():
return var