gpt4 book ai didi

python - 获取闭包的父函数

转载 作者:行者123 更新时间:2023-11-28 18:31:57 24 4
gpt4 key购买 nike

def foo():
def bar():
pass

return bar

inner_func = foo()

是否可以通过某种方式从 inner_funcbar 获取对父函数 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com