python实现函数计时器有两种方法:
- 使用装饰器实现
- 利用上下文管理实现
装饰器实现:
# 程序代码
from functools import wraps
from datetime import datetime
from time import sleep
def timer(func):
@wraps(func)
def inner(*args, **kwargs):
start_time = datetime.now()
print("start time is {}".format(datetime.now()))
result = func(*args, **kwargs)
end_time = datetime.now()
print("end time is {}".format(datetime.now()))
print("共花费时间:{}".format(end_time - start_time))
return result
return inner
@timer
def run(): #timer(run)
print("程序开始:")
sleep(5)
print("程序结束")
if __name__ == '__main__':
run()
# 运行结果
start time is 2020-05-19 09:02:37.669742
程序开始:
程序结束
end time is 2020-05-19 09:02:42.673055
共花费时间:0:00:05.003327
上下文管理实现
# 程序代码
class timer(object):
def __enter__(self):
self.t0 = datetime.now()
print("start time is {}".format(datetime.now()))
def __exit__(self, exc_type, exc_val, exc_tb):
print("end time is {}".format(datetime.now()))
print("共花费时间:{}".format(datetime.now() - self.t0))
def run():
print("程序开始")
sleep(5)
print("程序结束")
if __name__ == '__main__':
with timer() as t:
run()
# 运行结果
start time is 2020-05-19 09:01:44.077509
程序开始
程序结束
end time is 2020-05-19 09:01:50.086083
共花费时间:0:00:06.008637
小结:
- 使用装饰器来计时,使用方便,在函数头引入装饰器即可,只能对某一个函数体计时。
- 使用上下文管理来计时,操作上比较麻烦,但是可以针对一个代码块来计时。