【问题标题】:Python: access nested functions by namePython:按名称访问嵌套函数
【发布时间】:2014-02-06 03:16:01
【问题描述】:

在函数内部,我可以使用 dir() 来获取嵌套函数的列表:

>>> def outer():
...  def inner(): pass
...  print dir()
...
>>> outer()
['inner']

...但是然后呢?如何按名称访问这些功能?我看不到 __dict__ 属性。

【问题讨论】:

    标签: python reflection nested-function


    【解决方案1】:

    首先:您确定要这样做吗?这通常不是一个好主意。也就是说,

    def outer():
        def inner(): pass
        locals()['inner']()
    

    您可以使用locals 获取局部变量值的字典,然后查找'inner' 的值以获取函数。但是,不要尝试编辑局部变量 dict;它不会正常工作。


    如果你想在外部函数之外访问内部函数,你需要以某种方式存储它。局部变量不会成为函数属性或类似的东西;当函数退出时它们被丢弃。可以返回函数:

    def outer():
        def inner(): pass
        return inner
    
    nested_func = outer()
    nested_func()
    

    【讨论】:

    • 如果您有兴趣,我想制作一个处理函数字典,并希望避免像handler["foo"] = foo 这样添加几十行。如果可以的话,我会使用 lambdas...
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多