获取closu的父函数

2024-10-03 00:16:32 发布

您现在位置:Python中文网/ 问答频道 /正文

def foo():
    def bar():
        pass

    return bar

inner_func = foo()

inner_funcbar获取对父函数foo的引用是否可能?你知道吗

通过查看PythonTutorOnline的源代码,我找到了我需要的here。有没有其他方法可以做到这一点?如果不是的话,我怎么能不使用Bdb就获得当前堆栈信息呢?你知道吗


Tags: 方法函数信息returnhere源代码foo堆栈
2条回答

这只会在另一个函数体中找到FunctionDef:

测试.py

def bar():
    pass

def foo():
    def bar():
        pass
    return bar

inner_func = foo()

代码:

import ast


def find_parent(par):
    for par_node in mod.body:
        if isinstance(par_node, ast.FunctionDef):
            for node in par_node.body:
                if isinstance(node, ast.FunctionDef) and node.name == inner_func.func_name:     
                    return eval(par_node.name)

输出:

n [12]: from test import  *

In [13]: mod =  ast.parse(open("/home/padraic/test.py").read())

In [14]: find_parent(mod)
Out[14]: <function test.foo>

In [15]: find_parent(mod).func_name
Out[15]: 'foo'

这还远远不够完美,但有个主意:

getattr(__import__(foo().__module__), 'foo')

其中名称'foo'可以根据@zondo的注释以某种方式获得。你知道吗

相关问题 更多 >