PYTHON-有参装饰器,无参装饰器,语法糖

装饰器    装饰器就是闭包函数的一种应用场景一 为什么要用装饰器    #开放封闭原则:对修改封闭,对扩展开放二 什么是装饰器    装饰器他人的器具,自己能够是任意可调用对象,被装饰者也能够是任意可调用对象。    强调装饰器的原则:        1 不修改被装饰对象的源代码        2 不修改被装饰对象的调用方式    装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能三 装饰器的使用    1. 无参装饰器        def 装饰器名字(func):            def wrapper(*args,**kwargs):                #func是被装饰的对象,这里能够写执行前的功能                res=func(*args,**kwargs)                # 这里能够写执行后的功能                return res            return wrapper        @装饰器名字  #被装饰的函数名字 = 装饰器名字(被装饰的函数内存地址)        def 被装饰的函数名字():            pass    2. 有参装饰器        def 装饰器名字(参数1,参数2,...):            def outter(func):                def wrapper(*args,**kwargs):                    res=func(*args,**kwargs)                    return res                return wrapper            return outter        @装饰器名字(值1,值2,...) #@outter        def 被装饰的函数名字():            pass3. 语法糖:在被装饰对象正上方单独一行写    无参:@装饰器的名字    有参:@装饰器的名字(arg1,arg2,...)    @timmer # index=timmer(index)    def index():        pass    @auth2(engine='file') # @名字  # index=名字(index)    def index():        pass    叠加多个装饰器    @deco1    @deco2    @deco3    def index():        pass    解释语法的顺序:自下而上,deco3=》deco2=》deco1    调用index()时才开始触发装饰器内部闭包函数的执行,闭包函数执行顺序是:自上而条,                            deco1.wrapper1=>deco2.wrapper2=>deco3.wrapper3    wrapper.__name__=func.__name__ (函数名字赋值)    wrapper.__doc__=func.__doc__   (注释的内用赋值#)
相关文章
相关标签/搜索