def foo():
def bar():
pass
return bar
inner_func = foo()
以某种方式可以从foo
或inner_func
引用父函数bar
吗?
查看PythonTutorOnline
的源代码,我找到了我需要的内容here。有没有其他方法可以做到这一点?如果不是我如何在不使用Bdb
的情况下获得当前的堆栈信息?
答案 0 :(得分:1)
这只会在另一个函数体内找到FunctionDef:
test.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'
答案 1 :(得分:0)
这远非完美,但这是一个想法:
getattr(__import__(foo().__module__), 'foo')
根据@zondo的评论,可以以某种方式获得名称'foo'
。