首页 > 其他 > 详细

装饰器浅谈

时间:2018-10-22 18:43:09      阅读:133      评论:0      收藏:0      [点我收藏+]

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

 

装饰器浅谈

原文:https://www.cnblogs.com/52forjie/p/9831662.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!