Python3:如何检查函数是否被其他函数调用?
在Python 3中检测函数的调用者
当然可以实现这个需求!Python的inspect模块能帮我们获取调用栈的详细信息,这样就能轻松判断函数y是被哪个函数调用的了。
直接上实现代码:
import inspect def x(): y() def y(): # 获取当前调用栈,栈的第0个元素是y自身,第1个是调用y的函数帧 caller_frame = inspect.stack()[1] # 获取调用者的函数名 caller_name = caller_frame.function if caller_name == 'x': print("function y was called by another function") else: print("function y was not called by another function") # 测试调用 x() # 输出: function y was called by another function y() # 输出: function y was not called by another function
补充说明:
inspect.stack()会返回一个栈帧对象的列表,每个元素代表调用栈中的一层。[1]对应的就是直接调用当前函数的那一层。- 如果担心性能问题(因为获取调用栈会有一定开销),也可以给
y函数加一个可选参数来传递调用者信息,比如:
def x(): y(caller='x') def y(caller=None): if caller == 'x': print("function y was called by another function") else: print("function y was not called by another function")
这种方法更高效,但需要调用者主动传递信息,灵活性不如inspect的方法。
内容的提问来源于stack exchange,提问作者user9613667
相关产品推荐
相关产品推荐

