【问题标题】:How to refer to the local module in Python?如何在 Python 中引用本地模块?
【发布时间】:2009-12-02 22:42:21
【问题描述】:

假设我们有一个模块m

var = None

def get_var():
    return var

def set_var(v):
    var = v

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

所以我需要一种从set_var() 中引用模块m 的方法,它本身就是模块m 的成员。我该怎么做?

【问题讨论】:

    标签: python import module packages


    【解决方案1】:
    def set_var(v):
        global var
        var = v
    

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

    【讨论】:

      【解决方案2】:

      正如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
      

      【讨论】:

        【解决方案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。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-30
          • 2021-09-02
          • 2011-12-05
          • 1970-01-01
          • 1970-01-01
          • 2015-12-01
          • 2012-11-11
          • 2019-11-10
          相关资源
          最近更新 更多