2024-09-30 10:33:17 发布
网友
给定inspect.stack()的输出,是否可以从堆栈帧的任何位置获取函数对象并调用这些对象?如果是,怎么办?在
inspect.stack()
我已经知道函数的名称了
我的意思是:假设我是一个函数,我试图确定我的调用者是生成器还是常规函数?我需要对函数对象调用inspect.isgeneratorfunction()。你怎么知道是谁打电话给你的?inspect.stack(),对吗?所以,如果我能把这些放在一起,我就能得到我的问题的答案。也许有更简单的方法可以做到这一点?在
inspect.isgeneratorfunction()
我采取了以下方法,与厄尔玛的回答非常相似。在
stack = inspect.stack() parent_locals = stack[1][0].f_locals['self'] parent_func_name = stack[1][3] parent_func_attr = getattr(parent_locals,parent_func_name) parent_func = parent_func_attr.im_func is_parent_gen = inspect.isgeneratorfunction(func)
下面是一个代码片段。没有错误检查。其思想是在父函数的局部变量中找到被调用的函数对象。返回的函数对象应该是父对象。如果您还想搜索内置项,那么只需查看堆栈[2][0].f_内置项。在
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解决方案的启发)
我采取了以下方法,与厄尔玛的回答非常相似。在
下面是一个代码片段。没有错误检查。其思想是在父函数的局部变量中找到被调用的函数对象。返回的函数对象应该是父对象。如果您还想搜索内置项,那么只需查看堆栈[2][0].f_内置项。在
在一个类的例子中,可以写下以下内容(受Marcin解决方案的启发)
^{pr2}$相关问题 更多 >
编程相关推荐