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

时间:2009-12-02 12:28:54

标签: python import module packages

假设我们有一个模块m

var = None

def get_var():
    return var

def set_var(v):
    var = v

这不会按预期工作,因为set_var()不会在模块范围v中存储var。它将创建一个局部变量var

所以我需要一种在m内引用模块set_var()的方法,m本身就是模块{{1}}的成员。我该怎么做?

3 个答案:

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