装饰器函数
装饰器的本质:一个闭包函数
装饰器的功能:在不修改原函数及其调用方式的情况下对原函数的功能镜像扩展
装饰器的原则:对扩展开放,对修改封闭
装饰器的固定格式
1 def wrapper(func): 2 def inner(*args,**kwargs) 3 '''执行函数前要做的内容''' 4 ret = func(*args,**kwargs) 5 '''执行函数后要做的内容''' 6 return ret 7 return inner 8 #以上为装饰器的固定格式 9 @wrapper # get=wrapper(get)=inner 语法糖10 def get()11 pass
带参数的装饰器
1 def outer(flag): 2 def timer(func): 3 def inner(*args,**kwargs): 4 if flag: 5 print('''执行函数之前要做的''') 6 re = func(*args,**kwargs) 7 if flag: 8 print('''执行函数之后要做的''') 9 return re10 return inner11 return timer12 @outer(False) # 套上一个新的函数即可13 def func():14 print(111)15 func()
多个装饰器装饰同一个函数
1 def wrapper1(func): 2 def inner(): 3 print('wrapper1 ,before func') 4 func() 5 print('wrapper1 ,after func') 6 return inner 7 8 def wrapper2(func): 9 def inner():10 print('wrapper2 ,before func')11 func()12 print('wrapper2 ,after func')13 return inner14 15 @wrapper216 @wrapper117 def f():18 print('in f')19 20 f()