inspect.stack获取调用栈的使用方法


inspect.stack()获取调用栈的使用方法

用途

使用inspect.stack()方法可以获取当前代码和调用代码的信息

简单代码说明
import inspect

def get_current_function_name():
    return inspect.stack()
class MyClass:
    def function_one(self):
        print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))
if __name__ == "__main__":
    myclass = MyClass()
    myclass.function_one()

打印结果如下:

[FrameInfo(frame=<frame at 0x000002161F29D958, file 'tbss.py', line 4, code get_current_function_name>, filename='tbss.py', lineno=4, function='get_current_function_name', code_context=['    return inspect.stack()\n'], index=0), FrameInfo(frame=<frame at 0x000002161EB9C3C8, file 'tbss.py', line 7, code function_one>, filename='tbss.py', lineno=7, function='function_one', code_context=['        print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))\n'], index=0), FrameInfo(frame=<frame at 0x000002161F191428, file 'tbss.py', line 13, code <module>>, filename='tbss.py', lineno=13, function='<module>', code_context=['    myclass.function_one()\n'], index=0)] 
#-----------------*******************--------------------
首先我们可以看出这是一个列表list:
分为两部分内容:
	第一部分是inspect函数本身的信息也就是get_current_function_name,第二部分就是调用inspect的信息也就是function_one
内容详解:
	可以看出获取的内容是个元组,里面记录了函数或者调用函数的内存地址,文件名称,所在行数,函数名称和index信息
调用演示
import inspect

def get_current_function_name():
#获取调用函数后取调用函数的名称
    return inspect.stack()[1][3]
class MyClass:
    def function_one(self):
        print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))
class MyBug:
    def function_hhh(self):
        print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))
if __name__ == "__main__":
    myclass = MyClass()
    myclass.function_one()
    mybug=MyBug()
    mybug.function_hhh()

打印结果如下:

MyClass.function_one invoked
MyBug.function_hhh invoked
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值