装饰器浅谈
Posted 52forjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器浅谈相关的知识,希望对你有一定的参考价值。
1,单层装饰器
def timer(func): def init(*args,**kwargs): func() return init
@timer #func = timer(func) def func(*args,**kwargs): print(‘is here‘) func()
2,多层装饰器
def before(func): def init2(*args,**kwargs): print(111) func() print(5555) return init2 def after(func): def init1(*args,**kwargs): print(2222) func() print(4444) return init1 @before @after #多层装饰器由外层装饰器包含内部装饰器 mid=before(after(mid)) def mid(*args,**kwargs): print(333) mid()
===>
111
222
333
444
555
#打印结果的顺序和调用顺序刚好相反。
函数的调用顺序
1,after(mid) 先执行最里面的after return init1函数
2,before(init1) 再次执行before函数 return init2
3, 执行func() 因为函数func已经等于init2 ,所以打印111
4,执行before里面的func() 因为前面before(init1)已经把func变成init1,所以变相的执行init1()
5,执行init1() 打印2222
6,执行after里面的func() 因为开始after(mid) 把mid函数穿进去了,所以执行mid()
7,mid() 打印333
8,执行完mid() 继续执行print(444)
9,在打印444和5555
以上是关于装饰器浅谈的主要内容,如果未能解决你的问题,请参考以下文章