python3学习之装饰器

发布时间:2019-09-26 07:24:46编辑:auto阅读(1603)

    #定义装饰器,outer参数是函数,返回也是函数
    #作用:在函数执行前和执行后分别附加额外功能
    def  outer(func):
        def  inner(*args, **kwargs):
            print("log")
            func(*args, **kwargs)
            print("Don't back")
            # return "r"
        return inner
    @outer
    def  f1(a):
        print(a,"F1")
    @outer
    def  f2(a,b):
        print("F2",a,b)
    f1(123)
    f2(123,456)
    
    
    #带参数的装饰器,在outer外边又包装了一层
    def oo(arg):
        print("hihihihi")    #此处的代码,在装饰器被调用时就被执行,不需要等被装饰的函数被调用
        def  outer(func):
            def  inner(*args, **kwargs):
                print(arg)
                print("log")
                func(*args, **kwargs)
                print("Don't back")
                print(arg)
                # return "r"
            return inner
        return outer
    def  tt(func):
        def  inner(*args, **kwargs):
            # print(arg)
            print("aaaaa")
            func(*args, **kwargs)
            print("ttttt")
            # print(arg)
            # return "r"
        return inner
        
    @tt
    @oo(123333)   #可以多层装饰,规则是:从上到下执行装饰器
    def  f1(a):
        print(a,"F1")
    
    @oo(11111)
    def  f2(a,b):
        print("F2",a,b)
    
    #f1(123)
    #f2(123,456)
    
    结果:
    
    hihihihi
    hihihihi

关键字