python之路(7)装饰器
前言
装饰器:为函数添加附属功能,本质为函数
原则:不修改被修饰函数的源代码
不修改被修饰函数的调用方式
装饰器=高阶函数+函数嵌套+闭包
使用场景演示
定义下面函数
def cal(l): res = 0 for i in l: time.sleep(0.1) res+=1return res
想要实现检测函数的运行时间
import time def cal(l): start_time = time.time() res = 0 for i in l: time.sleep(0.1) res+=1 stop_time = time.time() print("函数的运行时间%s" %(stop_time-start_time)) return res
以上函数虽然完美的实现了测量时间,但是违反了开放封闭原则,修改了函数中的代码,我们应该在不改变函数代码的前提下加入检测时间的功能,由此应该引入装饰器的概念
import time def timer(func): def wrappper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) # --> (不修改修饰函数的源代码) stop_time=time.time() print('函数运行的时间%s' %(stop_time-start_time)) return res return wrappper 注:其上就是装饰器 @timer #做了将cal函数名作为参数传给了timer函数,并返回赋值给cal cal = timer(cal) --> (不修改修饰函数的调用方式) def cal(l): res = 0 for i in l: time.sleep(0.1) res+=1 return res cal(range(10))#这里的cal,调用的其实是装饰器里的wrapper内嵌函数