1. 装饰器的原理以及为什么要使用装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
在不影响原代码结构的情况下为其添加功能
2. 装饰器的基本用法
def test(func): def warpper(*args,**kwargs): print("====start====") func(*args,**kwargs) print("=====end====") return warpper @test def f(): print("2018-06-04") f()
3. 带参数的装饰器
def test(m): #获取参数 def inner(func): def warpper(*args,**kwargs): print(m) #打印该参数 if m==1: #判断该参数 print("start") func(*args,**kwargs) print("end") return warpper return inner @test(m=1) #传入参数 def f(): print("2018-06-04") f()
4. 被装饰的函数有返回值怎么处理
res=func(*args,**kwargs)
return res
在执行该函数的时候 接收函数的返回值,并在其后return
5. 多个装饰器的执行顺序
装饰器函数的执行顺序是分为定义阶段和执行阶段的
装饰器函数在被装饰函数定义好后立即执行
在函数定义阶段:执行顺序是从内而外的
在函数执行阶段:执行顺序由外而内,一层层执行
例子:如下
def war1(func): print("war1") def inner(*args, **kwargs): print("======war1 start=====") func(*args, **kwargs) #inner print("======war1 end=====") return inner def war2(func): print("war2") def inner(*args,**kwargs): print("======war2 start=====") func(*args,**kwargs) print("======war2 end=====") return inner @war1 @war2 def f(): print("****self****") f()