装饰器浅谈

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

 






















以上是关于装饰器浅谈的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Python装饰器

python使用上下文对代码片段进行计时,非装饰器

浅谈装饰器(Python)

浅谈对python装饰器的理解

浅谈设计模式:装饰器模式|中介模式|原型模式

浅谈装饰器