gpt4 book ai didi

python - 从框架对象获取执行堆栈上函数对象的引用?

转载 作者:行者123 更新时间:2023-12-01 06:19:43 25 4
gpt4 key购买 nike

鉴于inspect.stack()的输出,是否可以从堆栈帧的任何位置获取函数对象并调用它们?如果是这样,怎么办?

(我已经知道如何获取函数的名称。)

这就是我的意思:假设我是一个函数,我试图确定我的调用者是生成器还是常规函数?我需要在函数对象上调用 inspect.isgeneratorfunction() 。您如何知道是谁给您打电话? inspect.stack(),对吧?因此,如果我能以某种方式将它们放在一起,我就会得到我的问题的答案。也许有更简单的方法来做到这一点?

最佳答案

这是执行此操作的代码片段。没有错误检查。这个想法是在祖父的局部变量中找到被调用的函数对象。返回的函数对象应该是父对象。如果您还想搜索内置函数,那么只需查看 stacks[2][0].f_builtins 即可。

def f():
stacks = inspect.stack()
grand_parent_locals = stacks[2][0].f_locals
caller_name = stacks[1][3]
candidate = grand_parent_locals[caller_name]

对于类,可以编写以下内容(受 Marcin 解决方案的启发)

class test(object):
def f(self):
stack = inspect.stack()
parent_func_name = stack[1][3]
parent_func = getattr(self, parent_func_name).im_func

关于python - 从框架对象获取执行堆栈上函数对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1034688/

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