如何访问 python 中嵌套函数的变量?

How to access variable of a nested functions in python?

我需要访问在嵌套函数中设置的变量。我正在从另一个线程读取这个变量数据。在不违反任何范围的情况下获取数据的最佳方法是什么?

这是代码片段,

class main(object):
    def sub_fun(self):
        def inner_fun(self):
            self.var = 10
        inner_fun(self)

p = main().sub_fun()

现在如何访问 pvar 属性?

问题是 main.sub_fun returns None。有两个简单的解决方法:

  1. 只需在调用方法之前存储对您创建的项目的引用:

    p = main()
    p.sub_fun()
    print(p.var)
    

    这是我认为的最佳选择。

  2. 如果你真的想要单行版本工作,return self from sub_fun:

    def sub_fun(self):
        def inner_fun():
            self.var = 10
        inner_fun()
        return self
    
    print(main().sub_fun().var)
    

在这两种情况下都不需要将 self 传递给 inner_fun。当找不到本地名称时,它将始终查看外部范围。 #2 显示了一个例子。

class main(object):
    def sub_fun(self):
        def inner_fun(self):
          self.var = 10
p = main()

您无法访问嵌套函数的变量,因为它是一个闭包,只能由直接父级访问。 var 只能通过 inner_fun 访问。请参阅下面的不同实现。

class main(object):
def outer_function(self):

    def inner_function(self):
        self.x = 10
        return self.x

    out = inner_function(self) # Accessing the inner function
    return out 

p = main()
q = p.outer_function() 
print(q)

如果 class 对象或父函数需要访问子嵌套函数内的变量,则应通过返回变量将其提升到外部作用域。否则变量的范围将只存在于所谓的子嵌套函数中。