装饰器的本质:一个闭包函数
装饰器的功能:在不修改原函数及其调用方式的情况下对原函数的功能镜像扩展
装饰器的原则:对扩展开放,对修改封闭
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 re 10 return inner 11 return timer 12 @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 inner 14 15 @wrapper2 16 @wrapper1 17 def f(): 18 print(‘in f‘) 19 20 f()
原文:https://www.cnblogs.com/zxq520921/p/9420487.html