フルスタックは、Pythonのデコレータ高度を通過します--12-

パラメータを持つデコレーター

デコレータは、あなたがデコレータを有効にするかどうかを判断するためのパラメータが必要な場合は、有効にするかどうかを決定するためのパラメータを渡す必要があり、使用しています。

現在、関数の内部で使用される外部関数、関数パラメータへの引数としてデコレータ、伝達関数名は達成できないパラメータを渡す、と呼ばれています。

したがって、必要である、渡されたパラメータを達成するために、ネストされたレイヤーを追加するために最大3つのデコレータ!

インポートから functoolsのインポートがラップ

FLAGを = 

DEF out_warpper(フラグ):
     デフwarpper(F):
        @wraps(f)は
        デフw_in():
             もし:旗
                 プリント" これはワープです!" 
                RET = F()
             
                RET = F()
             リターンRETの
         復帰はw_in
     戻りwarpper

#out_warpper = out_warpper(FLAG)→out_warpper = warpper 
#関数func1 = warpper(関数func1)→関数func1 = w_in 
@out_warpper(FLAG)  関数func1の
DEFの関数func1():
    time.sleep( 1 プリント" これは関数func1ある" 
@out_warpper (FLAG)
DEF 関数func2(): time.sleep( 1 プリント" これは関数func2である" 関数func1() 関数func2()

@記号の後に実行されたときに3つの第1行、即ちout_warpper = out_warpper(FLAG)、変数フラグを保存することができる= warpper、閉鎖機能を、out_warpper返します。

@関数名で、関数func1 = warpper(関数func1)、それにより、送信パラメータのデコレータを達成する、関数func1 = w_inを返します。

 

装飾的な機能デコレータの複数

デフwarper1(F):
     DEF 、内側():
         プリント" inner1を行う始める!" 
        、F()
        印刷を" 後inner1行く!" を返すインナー

デフwarper2に(F):
     DEF 、内側():
         印刷" やる始まります!inner2 " 
        F()
        印刷" ゴーinner2後に!" を返すインナー

デフ(F)warper3を:
     DEF 、内側():
         プリント" inner3ん始まる!" 
        、F()
        印刷を" 後inner3行く!" を返すインナー

@ warper3 
@ warper2 
@ warper1 
デフFUNC():
     印刷" これはFUNCです" 


FUNCを()

 

 、最も外側の装飾から、機能を実行する関数の前にデコレータ装飾機能には、複数の最も内側→→最内層から始めて、出て行って行なわ

 

おすすめ

転載: www.cnblogs.com/zxw-xxcsl/p/11721129.html