【问题标题】:How to access variable of a nested functions in python?如何在python中访问嵌套函数的变量?
【发布时间】:2019-04-04 05:29:57
【问题描述】:

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

这里是代码sn-p,

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

p = main().sub_fun()

现在如何访问pvar属性?

【问题讨论】:

  • var 字面上不存在。它仅在调用 inner_fun 函数后创建,并且您尚未在任何地方调用该函数。
  • 是的,这是我的另一个问题,我试图通过“p.sub_fun().inner_fun()”调用该函数,但它不起作用是否有任何方法可以通过“p.sub_fun”访问().inner_fun().var"
  • 考虑为你的函数添加一个返回值并修正你的缩进。

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


【解决方案1】:

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

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

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

    我认为这是最好的选择。

  2. 如果你真的想让单行版本工作,请从sub_fun返回self

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

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

【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 2019-11-21
      • 2022-12-05
      • 2014-02-18
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 2015-08-13
      相关资源
      最近更新 更多