思路
python使用修饰器记录方法耗时,目的是每当方法执行完后,可以记录该方法耗时,而不需要在每个方法的执行前后,去创建一个临时变量,来记录耗时。
方式一(不推荐):
在每个方法的执行前后,去创建一个临时变量,来记录耗时,代码如下,缺点在于,如果有10个、100个方法,那不得写10次、100次?且这样去写,容易写漏,而且过于冗余
def fun():# 开始计时start_time = time.time()# 模拟耗时time.sleep(2)# 停止计时end_time = time.time()print("fun01执行喽")
方式二(推荐):
使用装饰器来记录耗时,好处在于,将其标注在需要记录的方法前,这样的做法,相当于将这个方法,传递给另一个方法中。让方法A去执行方法B(俗称:套娃)。
这样的好处在于,我们只需要做标注,不用去改动到需要记录耗时的方法中的内容,这样可以减少出错和冗余,代码如下:
import time
# 使用装饰器,记录方法执行耗时
def timer(method_name):def decorator(func):def wrapper(*args, **kwargs):# 开始计时start_time = time.time()# 执行方法result = func(*args, **kwargs)# 停止计时end_time = time.time()# 统计耗时并输出execution_time = end_time - start_timelog = "{} 执行耗时: {:.2f} 秒".format(method_name, execution_time)print(log)return resultreturn wrapperreturn decorator# 方法1 使用装饰器标注
@timer("fun01()")
def fun01():# 模拟耗时time.sleep(2)print("fun01执行喽")# 方法2 不使用任何标注
def fun02():# 模拟耗时time.sleep(1)print("fun02执行喽")# 方法3 使用装饰器标注
@timer("fun03()")
def fun03():# 模拟耗时time.sleep(3)print("fun03执行喽")# 顺序执行fun01、02和03
fun01()
fun02()
fun03()
代码直接执行,可以看到如下的输出:
1.输出fun01()“执行喽”,却输出耗时是2.01秒,因为这里sleep了2秒,且使用了装饰器。
2.输出fun02()“执行喽”,但未记录执行耗时,原因是这里并未使用“装饰器”记录方法的耗时。
3.输出fun03()“执行喽”,却输出耗时是3.00秒,因为这里sleep了3秒,且使用了装饰器。
整理不易!
点赞!关注呗!