装饰器
1.装饰器作用
在不改变函数调用方式的基础上,在函数前后添加功能。
2.语法糖
位置放在被装饰函数上面
def timer(f): #装饰器函数 def inner(): start = time.time() f() #被装饰的函数 end = time.time() print(end - start) return inner @timer #语法糖:@装饰器函数名 def func(): time.sleep(0.1) print('111') #语法糖的作用相当于在此处执行:func = timer(func),即把inner赋给func
3.被装饰函数带返回值
def timer(f): def inner(): start = time.time() ret = f() #被装饰的函数 end = time.time() print(end - start) return ret return inner @timer #语法糖:@装饰器函数名 def func(): time.sleep(0.1) print('111') return ‘222’ #添加返回值 #语法糖的作用相当于在此处执行:func = timer(func) ret = fun() print(ret)
4.被装饰函数带参数
在需要加入参数的位置全部加入参数
def timer(f): def inner(*args,**kwargs): #万能形参 start = time.time() ret = f(*args,**kwargs) #被装饰的函数 end = time.time() print(end - start) return ret return inner @timer #语法糖:@装饰器函数名 def func(a,b): time.sleep(0.1) print('111',a) return ‘222’ #添加返回值 #语法糖的作用相当于在此处执行:func = timer(func) ret = fun(1,b = 2) print(ret)
5.装饰器固定模式
6.functiools.wraps()
作用:恢复被装饰函数的属性,即用户可以按照原来的方式使用被装饰函数。
7.可随时更改是否是使用装饰器
@timmer_out(FLAGE):
1.先执行函数timmer_out(FLAGE)
2.把执行结果给@,即@timmer
8.多装饰器装饰一个函数
执行完@wrapper1后把结果传给@wrapper执行。