def foo():
def bar():
pass
return bar
inner_func = foo()
是否可以通过某种方式从 inner_func
或 bar
获取对父函数 foo
的引用?
查看 PythonTutorOnline
的源代码,我找到了我需要的东西 here .有没有其他方法可以做到这一点?如果不是,我如何在不使用 Bdb
的情况下获取当前堆栈信息?
最佳答案
这只会在另一个函数体内找到 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'
关于python - 获取闭包的父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36240157/