デコレータ関数(B)

高度なデコレータ

パラメータを持つ1.デコレータは
、元のデコレータに基づいて新しいパラメータの導入であります

マルチレイヤ機能セット、マルチパスパラメータが追加された機能か否かを判断するが、複数のクロージャを使用して、パラメータを渡します

そして、同じ原理のデコレータは、外の世界へのこの時間は、上の元のデコレータ機能にパラメータを渡し、次に達成するための層の機能を設定します

今、この空間での最も外側の装飾的な役割は、ネストされた関数内の構造のみの機能は、新しいローカル変数を導入しており、変数の値は、外部から導入されます

このとき、多層入れ子関数、カッコ内の関数名のそれぞれが、そう離れ、と呼ばれ、二つの部分に見える@ @戻す1であることから、カッコ内の関数名のそれぞれが、そうするには、と呼ばれるものです@ @バック二つの部分に分離してご覧ください

インポート
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()

プラスデコレータ@wraps(FUNC)内側の前に、元の関数名には影響しませんが、functoolsからこの汎用モジュールを導入する必要

装飾機能の層は、関数名が操作から取り出されている場合ではない本当の名前、デコレータ内で取得されなければならない「インナー

 

2.装飾複数デコレータ同じ機能

トップ
以下
、上記前面の最初の実装、及び、フロント、リアした後、次の、その後リア
最外円上記人形実行構造。
原理:実際の実行順序は、最近のデコレータ機能、関数名に渡された最近のデコレータ機能、離れて実行するためのパラメータデコレータとして、戻り値でなければなりません。

実行結果示すように、

ユーザーが着陸を記録することができ、また実行時間を計算し、明確でなければならない二つの実行の論理的な順序でなければなりません。

おすすめ

転載: www.cnblogs.com/shachengcc1/p/11166131.html