Python(デコレータ)

デコレータは、関数の処理を装飾するための仕組みです。デコレータを使うと、手軽に関数の前後に任意の処理を付け加えることができます。

# デコレータ関数の定義
def show_func_name(func):
    # 関数内で関数を定義する
    def wrapper(*args,**kwargs):
        # 前処理
        print("---start:" + func.__name__)
        # 関数の実行
        res = func(*args,**kwargs)
        # 後処理
        print("\n---end:" + func.__name__)
        return res
    # 関数オブジェクトを返す
    return wrapper

# 処理時間を計測するデコレータ関数の定義
def time_log(func):
    def wrapper(*args,**kwargs):
        import datetime
        start = datetime.datetime.today()
        print("---start:" + func.__name__)
        res = func(*args,**kwargs)
        end = datetime.datetime.today()
        delta = end - start
        print("\n---end:" + func.__name__,delta,"sec")
        return res
    return wrapper

デコレータを使う場合、上記のような関数を定義します。

関数にデコレータを適用する場合は

@time_log
def test_iter():
    for i in p:
        print(i,end=" ")

のように関数を定義する直前に「@デコレータ名」を記述します。すると、その関数にデコレータが適用されます。

クラス定義の@staticmethodや@property,@ゲッター名.setterなど、pythonに用意されているデコレータ以外にも自作のデコレータを定義することで関数に手を加えることなく、関数の前後に新しい機能を追加することができるので、プログラムの実行ログを取ったり、データの引数が正しいかどうかの関数チェックを行ったりと色々な使い道が考えられます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください