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__   (註釋的內用賦值#)
相關文章
相關標籤/搜索