12日目のpythonデコレータ

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()

#アプリケーション:

これは、ユーザーの訪問を記録するために使用することができます

この関数の実行時間の計算

おすすめ

転載: www.cnblogs.com/p-t-m/p/11489304.html