擅长:python、mysql、java
<p>这只会在另一个函数体中找到FunctionDef:</p>
<p><em>测试.py</em>:</p>
<pre><code>def bar():
pass
def foo():
def bar():
pass
return bar
inner_func = foo()
</code></pre>
<p>代码:</p>
<pre><code>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)
</code></pre>
<p>输出:</p>
<pre><code>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'
</code></pre>