1.デコレータ
デコレータの役割を①:機能を変更せずに、関数の前と後に新機能を追加
②使用教義:オープン閉鎖原則(オープン:時間の延長のために開き、閉じ:改変のため閉鎖)
2.シンタックスシュガー:装飾的な機能@
ライブラリ3.このセクションアドレス:時間(インポート時)
印刷(time.tim())#現在の時刻を取得
印刷時に、ここで実行するためにしばらくの間、停止するプログラムで(time.sleep(間隔))#秒
デコレータ固定パターン:
例:
インポート時
デフtimmer(F):#デコレータ関数、fは装飾される関数であります
デフインナー():
開始= time.time()
F = K()
端= time.time()
右を返します
インナー戻ります
@timmer#糖衣構文、方法デコレータ関数func = timmer(FUNC)を呼び出す - >インナー
デフFUNC():#関数は、装飾的です
time.sleep(0.1)
印刷(「ブロガーのようにクール!」)
「比類のない」戻ります
パラメータを持つデコレーター機能:
インポート時
デフtimmer(F):#デコレータ機能
デフインナー(* argsを、** kwargsから):
開始= time.time()
RET = F(* argsを、** kwargsから)
端= time.time()
右を返します
インナー戻ります
@timmer#糖衣構文、方法デコレータ関数func = timmer(FUNC)を呼び出す - >インナー
デフFUNC(a、b)は:#飾ら機能
time.sleep(0.1)
印刷(「ブロガーのようにクール!」)
「比類のない」戻ります
プログラム内での実行の装飾機能の順序ことを理解すべきで:
デコレータは)関数呼び出し、および3つの機能を停止:(高度
500個の機能は、どのように関数を呼び出して停止する複数のパラメータは、存在する場合には
インポート時
flage =真
デフラッパー(flage):
デフtimmer(F):
デフインナー(* argsを、** kwargsから):
flage場合:
開始= time.time()
RET = F(* argsを、** kwargsから)
端= time.time()
印刷(最終スタート)
右を返します
他:
RET = F(* argsを、** kwargsから)
印刷(「ここでは機能:」)
インナー戻ります
リターンtimmer
@wrapper(flage)#等価ラッパー(flage)= timmer、最初の実行ラッパー()、次いで機能timmerを呼び出します
デフFUNC(AC):
rtime.sleep(0.3)
プリント('11' )
FUNC(1,2)
複数の機能は、11の機能をインストール:
デフWRAPPER1(F):#1 F = FUNC
デフinner1():
印刷( 'オムFUNC後WRAPPER1')
F = K()
印刷( 'オムFUNC後WRAPPER1')
inner1戻ります
デフwrapper2(F):#F = inner1
デフinner2():
印刷( 'オムFUNC後wrapper2')
F = K()
印刷( 'オムFUNC後wrapper2')
inner2戻ります
DEF wrapper3(F)は#f = inenr2
デフinner3():
印刷( 'オムFUNC後wrapper3')
F = K()
印刷( 'オムFUNC後wrapper3')
inner3戻ります
@ wrapper3 #func = wrapper3(FUNC)= wrappr3(FUNC)= inner3
@ wrapper2 #func = wrapper2(FUNC)= wrapper2(inner1)= inner2
@ WRAPPER1 #func = WRAPPER1(FUNC) - > inner1
3つのデコレータ、デコレータの装飾に最も近い実行を使用して注文#
デフFUNC():
印刷(「Niubi「)
FUNC()# - > inner3() - > inner2() - > inner1()
#アプリケーション:
これは、ユーザーの訪問を記録するために使用することができます
この関数の実行時間の計算