python记录某函数块运行时间的“装饰器”的编写
程序员文章站
2021-12-29 11:52:13
文章目录一、装饰器的功能二、一个简单的统计某函数执行时间的装饰器代码实现一、装饰器的功能一、装饰器可以在不改动函数原代码和代码执行方式的同时,为某个函数添加新的功能,可以使得代码更简洁。同时,不改变源代码的特性,可以避免在更改源代码时,可能发生的牵一发而动全身的错误发生,导致原本运行正常的程序发生难以矫正的错误。二、不改变代码的执行方式,例如:在公司中,某函数的调用方式本为foo(),当为它加入新功能时,因为不使用装饰器,使得要使用新功能需要执行额外的代码,例如可能的:stat_time(fo...
一、装饰器的功能
一、装饰器可以在不改动函数原代码和代码执行方式的同时,为某个函数添加新的功能,可以使得代码更简洁。
同时,不改变源代码的特性,可以避免在更改源代码时,可能发生的牵一发而动全身的错误发生,导致原本运行正常的程序发生难以矫正的错误。
二、不改变代码的执行方式,例如:
在公司中,某函数的调用方式本为foo(),
当为它加入新功能时,因为不使用装饰器,使得要使用新功能需要执行额外的代码,例如可能的:stat_time(foo)。而因为公司不止你一人使用该新功能,但是其他人都习惯了原本foo()这样简单明了的函数调用方法,此时为了使得原调用方法同样能实现该新功能,就可以使用装饰器。
二、一个简单的统计某函数执行时间的装饰器代码实现
例如:
import time def stat_time(function): #时间统计函数 def inner(*args,**kwargs): start_time = time.time() function(*args,**kwargs) finish_time = time.time() print("op_time :%f\n"%(finish_time-start_time)) return inner #该装饰器的重点在于高阶函数的运用 def ccs(): print('ccs......') time.sleep(2) #代码运行时间过短,增加暂停方便记录运行时间 ccs = stat_time(ccs) ccs() @stat_time #等价于prent = stat_time(prent) def prent(): print('present......') time.sleep(2) prent() @stat_time def add(*args,**kwargs): #求和 num = 0 for i in args: num+=i print(num) time.sleep(2) add(3,4,4,5)
输出:
ccs...... op_time :2.000534 present...... op_time :2.000541 16 op_time :2.000664
二、装饰器内加装新功能(日志记录):
import time def show_time(floger=''): def stat_time(function): #时间统计函数 def inner(*args,**kwargs): start_time = time.time() function(*args,**kwargs) finish_time = time.time() print("op_time :%f"%(finish_time-start_time)) if floger=='true': print('日志记录\n') return inner return stat_time #该装饰器的重点在于高阶函数的运用 @show_time() def ccs(): print('ccs......') time.sleep(2) ccs() @show_time('true') def prent(): print('present......') time.sleep(2) prent() @show_time('true') def add(*args,**kwargs): num = 0 for i in args: num+=i print(num) time.sleep(2) add(3,4,4,5)
输出:
ccs...... op_time :2.000159 present...... op_time :2.000657 日志记录 16 op_time :2.000106 日志记录
本文地址:https://blog.csdn.net/qq_41725460/article/details/109060929
上一篇: python中什么是面向对象