🐍Python深化(Decorator)


🐍Python深化(Decorator)



デコレーション特性

  • の利点
  • コード重複除外可能、コード簡略
  • 構文は
  • モジュールよりも簡潔です
  • の組み合わせで、
  • を使いやすい
  • の欠点
  • デバッグが困難
  • エラーのブラー
  • 装飾の例

  • Closer関数を構築した.
  • は、関数の実行時間と関数名、パラメータ、出力の形式です.
  • import time
    
    def perf_clock(func):
    
        def perf_clocked(*args):
            # 시작시간 
            st = time.perf_counter()
            result = func(*args)
            # 종료시간 
            et = time.perf_counter() - st 
            # 함수명 
            name = func.__name__
            # 매개변수 
            arg_str = ','.join(repr(arg) for arg in args)
            # 출력 
            print('[%0.5fs] %s(%s) -> %r' % (et, name, arg_str, result))
            return result
        return perf_clocked
  • はそれぞれ3つの異なる機能の関数を構築した.
  • def time_func(seconds):
        time.sleep(seconds)
    
    
    def sum_func(*numbers):
        return sum(numbers)
    
    
    def fact_func(n):
        return 1 if n < 2 else n * fact_func(n-1)
    

    装飾品を使用しない例

    non_deco1 = perf_clock(time_func)
    non_deco2 = perf_clock(sum_func)
    non_deco3 = perf_clock(fact_func)
    
    
    non_deco1(2)
    # [2.00034s] time_func(2) -> None
    non_deco2(100, 200, 300, 400, 500) 
    # [0.00000s] sum_func(100,200,300,400,500) -> 1500
    non_deco3(10)
    # [0.00001s] fact_func(10) -> 3628800
  • デコーダを使わなければ...
  • perf clock()関数のパラメータで実行する関数が含まれます.
  • は、その後、変数に含まれます.
  • 変数に因子を加えて実行します.
  • アクセサリーの使用例

    @perf_clock
    def time_func(seconds):
        time.sleep(seconds)
    
    @perf_clock
    def sum_func(*numbers):
        return sum(numbers)
    
    @perf_clock
    def fact_func(n):
        return 1 if n < 2 else n * fact_func(n-1)
    作成した
  • Closer関数を実行する関数の上に配置します.
  • time_func(2)
    # [2.00027s] time_func(2) -> None
    sum_func(10,20,30,40,50)
    # [0.00000s] sum_func(10,20,30,40,50) -> 150
    fact_func(10)
    # [0.00000s] fact_func(1) -> 1
    # [0.00001s] fact_func(2) -> 2
    # [0.00002s] fact_func(3) -> 6
    # [0.00005s] fact_func(4) -> 24
    # [0.00005s] fact_func(5) -> 120
    # [0.00006s] fact_func(6) -> 720
    # [0.00007s] fact_func(7) -> 5040
    # [0.00008s] fact_func(8) -> 40320
    # [0.00009s] fact_func(9) -> 362880
    # [0.00010s] fact_func(10) -> 3628800
  • デコーダを使用すると...
  • 実行関数にパラメータを加えて実行が終了します!
  • アクセサリーの説明


    装飾器は関数を囲む形で構成されています.したがって、他の機能を実装する場合、既存の関数を変更することなく、データレコーダが使用される.
    ソース:https://dojang.io/mod/page/view.php?id=2427