美文网首页
python装饰器的理解+顺序

python装饰器的理解+顺序

作者: clshinem | 来源:发表于2017-12-26 15:41 被阅读0次
    def log(func):
        def wrapper(*args,**kwargs):
            return func(*args,**kwargs)
        return wrapper
    
    @log
    def f():
        ···
    

    相当于执行log(f)
    如果有参数log('参数')(f)=== wrapper(f)

    def decorator_a(func):
        print 'Get in decorator_a'
        def inner_a(*args,**kwargs):
            print 'Get in inner_a'
            return func(*args,**kwargs)
        return inner_a
    
    def decorator_b(func):
        print 'Get in decorator_b'
        def inner_b(*args,**kwargs):
            print 'Get in inner_b'
            return func(*args,**kwargs)
        return inner_b
    
    @decorator_b
    @decorator_a
    def f(x):
        print 'Get in f'
        return x*2
    f(1)
    

    装饰器其实在定义的时候就执行了decorator_a,decorator_b(顺序为从下到上)所以会先打印出get in decorator_a,和get in decoator_b 然后此时函数f已经变成了innerb,===inner_b(inner_a(f))当去调用f(1)的时候,会打印出get in inner_a,然后去调用inner_a,打印出 get in inner_a ,然后调用f 打印出 get in f,结束

    相关文章

      网友评论

          本文标题:python装饰器的理解+顺序

          本文链接:https://www.haomeiwen.com/subject/njhjgxtx.html