Python 实现函数计时器

python实现函数计时器有两种方法:

  1. 使用装饰器实现
  2. 利用上下文管理实现

装饰器实现:

# 程序代码
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

小结:

  1. 使用装饰器来计时,使用方便,在函数头引入装饰器即可,只能对某一个函数体计时。
  2. 使用上下文管理来计时,操作上比较麻烦,但是可以针对一个代码块来计时。

你可能感兴趣的:(Python)