代码之家  ›  专栏  ›  技术社区  ›  Tim Molendijk

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

  •  3
  • Tim Molendijk  · 技术社区  · 16 年前

    假设我们有一个模块 m :

    var = None
    
    def get_var():
        return var
    
    def set_var(v):
        var = v
    

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

    所以我需要一种方法来参考这个模块 从内 SETIVAR() ,它本身是模块的成员 . 我该怎么做?

    3 回复  |  直到 16 年前
        1
  •  9
  •   Community Mohan Dere    8 年前

    AS Jeffrey Aylesworth's answer 显示,您实际上不需要参考本地模块来实现OP的目标。这个 global 关键字可以达到这个目的。

    但是为了回答操作标题, 如何在python中引用本地模块? 以下内容:

    import sys
    
    var = None
    
    def set_var(v):
        sys.modules[__name__].var = v
    
    def get_var():
        return var
    
        2
  •  10
  •   Jeffrey Aylesworth    16 年前
    def set_var(v):
        global var
        var = v
    

    global关键字将允许您在函数中从内部更改全局变量。

        3
  •  3
  •   Eric O. Lebigot    16 年前

    作为Jeffrey答案的后续工作,我想补充一点,在Python3中,您可以更一般地从最近的封闭范围访问变量:

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