注パイソン12-day12

高度なデコレータ

1、デコレータ機能を使用しますが、関数呼び出し関数名やコメントにも__name通じ__、__ doc__内の例題ビュー

functools インポートラップ
 DEFの:ラッパー(FUNC)  FUNC =ホリデー
    @wraps(FUNC)
     DEFインナー(* argsを、** kwargsから):
         印刷' 飾られている機能が何を実行する前に' 
        RET = FUNC(* argsが、** kwargsからは)
         印刷飾られている関数の後に行う実行のリターンRETの
     復帰インナー

@wrapper    休日がラッパー(ホリデー)= 
DEF ホリデー(日):
     「」「これは休日の予告です'」 「
    印刷すべての休日%sの日%の日)
     リターン 楽しい

印刷(休日。__name__#のプリントアウト呼び出し元の関数の関数名
を印刷(休日。__doc__#のプリントアウト注釈機能は、関数と呼ばれる

#の結果:
    #の休日
    これは休日のお知らせです
functoolsインポートラップから
DEFの:ラッパー(FUNC)   #1 FUNC =ホリデー
    @wraps(FUNC)
    DEFインナー(* argsを、** kwargsからの):
         印刷' 関数は装飾やって実行される前に' 
        RET = FUNC (* argsを、** kwargsから)
         印刷関数実行を行う添え後のリターンRETの
     復帰インナー

@wrapper    休日がラッパー(ホリデー)= 
DEF ホリデー(日):
     「」 ' これは休日のお知らせです「」「
    印刷終日休日%sの日)
     のリターン 楽しい" 

印刷(休日。__name__#のプリントアウト機能の名前は、関数呼び出し、
印刷(休日。__doc__#のコメント機能呼び出し機能プリントアウト

最初の行をし、削除コードの3行、結果インナー
#1 なし

パラメータデコレータと2、

あなたには、いくつかの時間のためのデコレータ機能を使用する必要があるが、この時間の後、それは時間を持っていない場合は、パラメータ化デコレータを使用することができます

インポート
FLAGE = Falseの
 デフtimmer_out(フラグ):
     デフtimmer(FUNC):
         DEF、内側(* argsを、** kwargsから):
             あればフラグ:
                開始 = time.time()
                RET = FUNC(* argsを、** kwargsから)
                終了 = time.time()
                 プリント(エンド開始)
                 を返すRET
             
                RET = FUNC(* argsを、** kwargsから)
                 リターンRET
        戻り内側
     リターンtimmer
 timmer = timmer_out(FLAGE) 
@timmer_out(FLAGE)    ワッハッハー= timmer(ワッハッハー)
DEF :ワッハッハー()
    time.sleep( 0.1 プリント' wahahahahahaha ' 

@timmer_out(FLAGE)を
DEF erguotou():
    time.sleep( 0.1 プリント' erguotoutoutou ' 

ワッハッハー()
erguotou()

図3に示すように、装飾的な機能デコレータの複数

デフWRAPPER1(FUNC):
     デフinner1():
         プリント' WRAPPER1、FUNC前' 
        RET = FUNC()
         印刷' WRAPPER1、FUNC後' のリターンRETの
     復帰inner1 

デフwrapper2(FUNC):
     デフinner2():
         印刷' wrapper2、FUNC前' 
        RET = FUNC()
         プリント' wrapper2、FUNC後'リターンRETの
     復帰inner2 

デフwrapper3(FUNC):
     デフinner3():
         プリント' wrapper3、FUNC前' 
        RET = FUNC()
         印刷' wrapper3、FUNC後' のリターンRETの
     復帰inner3 

@ wrapper3 
@ wrapper2 
@ WRAPPER1 
デフF():
     印刷' Fにおける' の戻り ' 哈哈哈' 

印刷(f())

 

おすすめ

転載: www.cnblogs.com/xiao-le/p/11483146.html