Open1

pythonのデコレータを用いて処理時間を計測する

Akira KawaiAkira Kawai

デコレータとは?

デコレータは「元の関数を変更せずに、新たな機能を追加したい」という気持ちから生まれています。
プログラムが肥大化した際に、デコレータを使用することで関数の重複を減らし、横断的な機能(ログの取得や認証、処理時間の計測など)を簡潔に組み込むことができます。

以下の例では、既存の関数に、処理の開始と終了を伝えるwrapper()を追加しています。

def my_decorator(func):
    def wrapper():
        print("何か処理を開始します。")
        func()
        print("何か処理を終了します。")
    return wrapper

@my_decorator
def say_hello():
    print("こんにちは!")

もしこのmy_decorator()がないと、以下のような関数を新しく定義する必要が出てきます。
同様の処理を別の関数に対しても実行したいと考えると、_with_extra()関数を量産しなくてはならなくなり、コード自体が煩雑になってしまいます。従って、同じ処理を多くの関数に適用させたい場合は、デコレータの使用が有用となります。

def say_hello():
    print("こんにちは!")

def say_hello_with_extra():
    print("何か処理を開始します。")
    say_hello()  # 元の関数を呼び出し
    print("何か処理を終了します。")