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

3 投票
3 回答
1016 浏览
提问于 2025-04-15 16:36

假设我们有一个模块叫做 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

撰写回答