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

时间:2018-10-31 05:16:43

标签: python python-3.x nested-function

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

这是代码段,

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

p = main().sub_fun()

现在如何访问var的{​​{1}}属性?

2 个答案:

答案 0 :(得分:1)

问题是main.sub_fun返回None。有两种简单的解决方法:

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

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

    这是我认为最好的选择。

  2. 如果您确实希望使用单行版本,请从self返回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显示了一个示例。

答案 1 :(得分:1)

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)

如果需要类对象或父函数访问子嵌套函数内部的变量,则应通过返回该变量将其提升到外部作用域。否则,变量的作用域将仅驻留在所谓的子嵌套函数中。