码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器浅谈

时间:2018-10-22 20:20:51      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:执行   fun   color   turn   for   开始   等于   code   timer   

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

 

装饰器浅谈

标签:执行   fun   color   turn   for   开始   等于   code   timer   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!