1,装饰器
本质:本质就是一个闭包函数。------装饰器是函数的重点内容,所以必须要掌握。
装饰器的功能:在不修改函数的情况下原函数增加功能。
2,装饰器的基本模型
def timer(func)
def inner(*args,**kwargs)
‘’‘’‘’执行函数前要做的‘’‘’
ret=func(*args,**kwargs)
'''''''执行函数后要做的‘’‘’‘’‘’
return ret
return inner
@timer
def func2()
print('in func2')
func2()
3.有一个参数的装饰器
def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函数之前要做的''') re = func(*args,**kwargs) if flag: print('''执行函数之后要做的''') return re return inner return timer @outer(False) def func(): print(111) func()
4,有多个参数的装饰器
def wrapper1(func): def inner(): print('wrapper1 ,before func') func() print('wrapper1 ,after func') return inner def wrapper2(func): def inner(): print('wrapper2 ,before func') func() print('wrapper2 ,after func') return inner @wrapper2 @wrapper1 def f(): print('in f') f()
这个代码执行后的效果是,先执行wrapper1的before,再执行wrapper2的before---》wrapper2的after---》再执行wrapper1里的after。
顺序方面是有点绕。