Python自学笔记(17day)

装饰器的进阶

(1)

#如果我们要装饰很多函数,就需要写很多装饰名字,如果不想用,就要注释掉很多次,太麻烦
#一次可以用3层装饰器来实现简化

FALG=True
def login(f):
    def wrapper(func):
        def inner(*args,**kwargs):
            if FALG:
                """
                函数之前的操作
                """
                ret=func()
                """
                函数之后的操作
                """
                return ret
            else:
                ret=func()
                return ret
    return inner


@login(FALG)             #先调用函数login(),将FALG传入,拿到inner再装饰
def func(*args ,**kwargs):
    print("帅哥")
#当不需要运行时,只需要FALG=False,就不会执行函数的前后操作了

(2)

def wrapper1(func):
    def inner():
        print("wrapper1,before")
        ret=func()
        print("wrapper1,after")
        return ret
    return inner

def wrapper2(func):
    def inner():
        print("wrapper2,before")
        ret=func()
        print("wrapper2,after")
        return ret
    return inner

def func():
    print("in")

@wrapper2
@wrapper1
func()


#输出:wrapper2,before
#      wrapper1,before
#      in
#      wrapper1,after
#      wrapper2,after



#结论:多个装饰器装饰同一个函数,执行顺序:函数前按顺序依次并列执行+函数执行+函数后逆序
#执行      21---12

 

posted @ 2018-09-25 21:55  诺诺诺亚索隆  阅读(93)  评论(0编辑  收藏  举报