如何在Python中引用本地模块?

3
假设我们有一个名为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个回答

10
def set_var(v):
    global var
    var = v

使用全局关键字可以让你在函数内部修改全局变量。


9
正如Jeffrey Aylesworth的回答所示,实际上您不需要引用本地模块来实现OP的目标。使用global关键字即可实现此目的。
然而,为了回答OP标题中的问题“如何在Python中引用本地模块?”,请参考以下内容:
import sys

var = None

def set_var(v):
    sys.modules[__name__].var = v

def get_var():
    return var

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接