python 获取方法名_python随记之获取当前函数名

打日志的时候,经常会需要遇到打印当前函数名,以及执行他的函数名称。如果打印的函数名称正确的话,查询定位问题的原因效率就会提升,如果没有,查找代码就会麻烦的很。

这里介绍几个方法:sys模块,inspect模块

1、获取函数名称,获取类名称。

## 获取函数名称

deftest_func():pass

print('函数名称为:',test_func.__name__)##获取类名称

classTest:deftest(self):print(self.__class__.__name__)print('类名称为:',Test().__class__.__name__)

t= Test().test()

结果为:

函数名称为: test_func

类名称为: Test

Test

2、在函数内部或者类内部获取函数名称,可以使用sys模块中的sys._getframe().f_code.co_name,如下例:

importsys## 函数获取函数名称

deftest_sys():print('当前函数名称:',sys._getframe().f_code.co_name)

test_sys()##类获取函数名称

classTestSys:defts(self):print('当前函数名称:', sys._getframe().f_code.co_name)

t=TestSys()

t.ts()

结果:

当前函数名称: test_sys

当前函数名称: ts

当然,一般常用的是在不同的函数里调用的他,想要打印调用他的函数,我们尝试一下

importsys## 函数获取函数名称

defa():print('当前函数名称:',sys._getframe().f_code.co_name)defuse_a():## 使用a函数

a()## 调用使用a函数

print('------函数调用------')

use_a()##类获取函数名称

classTestSys:deftesta(self):print('当前函数名称:', sys._getframe().f_code.co_name)deftestb(self):

self.testa()## 一个类时

print('------单个类时内部调用------')

t=TestSys()

t.testb()classTestsys:deftestc(self):

TestSys().testa()## 两个类时,第二个类调用第一个类

print('------多个类时内部调用------')

t=Testsys()

t.testc()

结果为:

------函数调用------当前函数名称: a------单个类时内部调用------当前函数名称: testa------多个类时内部调用------当前函数名称: testa

由上可见,sys.__getframe().f_code.co_name是只能打印自己所在函数的名称,无法打印调用他的函数名称

3、使用inspect模块中的inspect.stack()方法,动态获取当前运行的函数名(或方法名称),我们看一个例子

importinspect## 函数获取函数名称

defa():print('当前函数名称:',inspect.stack()[1][3])defuse_a():## 使用a函数

a()## 调用使用a函数

print('------函数调用------')

use_a()##类获取函数名称

classTestSys:deftesta(self):print('当前函数名称:', inspect.stack()[1][3])deftestb(self):

self.testa()## 一个类时

print('------单个类时内部调用------')

t=TestSys()

t.testb()classTestsys:deftestc(self):

TestSys().testa()## 两个类时,第二个类调用第一个类

print('------多个类时内部调用------')

t=Testsys()

t.testc()

结果为:

------函数调用------当前函数名称: use_a------单个类时内部调用------当前函数名称: testb------多个类时内部调用------当前函数名称: testc

由上可见,inspect.stack()打印的是调用他的函数

有了这几种方法的支持,可以随心所欲的打log了,可以明晰的打印出那个函数的名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值