本文主要是介绍【Python】设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目来源:廖雪峰的官方网站
python初学者,求轻喷
题目:请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:
方法一:在函数内部记录始末时间(利用time模块):
def fn()start_time=time.time()result=func(*args, **kwargs)#从start到end指函数运行的主体部分end_time=time.time()print('%s executed in %s ms' % (fn.__name__, end_time-start_time))return result
方法一的好处是容易理解,而且对于只需要记录单个函数执行时间的情况易于实现,但是如果要记录多个函数的执行时间,使用方法一就会让代码过于累赘。因此可以改进为一个decorator。
方法二:定义一个decorator,对需要记录时间的函数进行监控
# -*- coding: utf-8 -*-
import time, functools
def metric(fn):def measure_time(*args, **kwargs):start_time=time.time()result=fn(*args, **kwargs)end_time=time.time()print('%s executed in %s ms' % (fn.__name__, end_time-start_time))return resultreturn measure_time
# 测试
@metric
def fast(x, y):time.sleep(0.0012)return x + y;@metric
def slow(x, y, z):time.sleep(0.1234)return x * y * z;f = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:print('测试失败!')
elif s != 7986:print('测试失败!')
#运行结果
fast executed in 0.002067089080810547 ms
slow executed in 0.12447643280029297 ms
注:@metric相当于该函数执行了fn=metric(fn)
这篇关于【Python】设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!