Python装饰器——程序计时功能的简便实现

  在平常跑程序的过程中,经常会出现对某一过程计时的需求,之前通常是引用time模块,在该过程代码开始和结束位置记下时间,最后相减得到结果,如:

import time

start = time.time()
xxx
end = time.time()
t = end - start

使用这种方式每次计时都要多写几行代码,如果能把这种计时功能封装成函数就更简便了,最近在网上学习到了python装饰器就能实现这种封装。
  装饰器是一种用来装饰函数或者类的特殊函数,其作用是在执行函数的基础上实现一些其他的功能,基础框架:

def outer(func):

	def inner(*args, **kwargs):
		# 实现其他功能的代码
		result = func(*args, **kwargs)
		# 实现其他功能的代码
		return result
	
	return inner

@outer
def func1():
	pass

使用@语法装饰函数func1后,每次执行func1时相当于执行外函数outer(func1),其返回的是内函数inner,内函数会执行func1(*args, **kwargs)和其他功能。
  程序计时装饰器实现和测试完整代码如下:

import time
import random

def record_time(func):

    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f'{func.__name__}执行时间:{end-start:.3f}秒')
        return result

    return wrapper
    
 @record_time
def download(filename):
    print(f'开始下载{filename}')
    time.sleep(random.randint(5,10))
    print(f'{filename}下载完成')

@record_time
def upload(filename):
    print(f'开始上传{filename}')
    time.sleep(random.randint(10,15))
    print(f'{filename}上传完成')

@record_time
def main():
	download('书籍1.pdf')
	upload('视频1.avi')
	download('视频2.mp4')

if __name__ == '__main__':
    main()

record_time为装饰器函数,其内函数wrapper中执行func函数,同时记录开始结束时间,相减得到运行时间。download,upload为模拟下载和上传函数,运行时间随机,@装饰download、upload、main三个函数后,每次运行对应函数时即会计时。一次运行结果如下:
程序计时函数测试结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值