Open1
pythonのデコレータを用いて処理時間を計測する
デコレータとは?
デコレータは「元の関数を変更せずに、新たな機能を追加したい」という気持ちから生まれています。
プログラムが肥大化した際に、デコレータを使用することで関数の重複を減らし、横断的な機能(ログの取得や認証、処理時間の計測など)を簡潔に組み込むことができます。
以下の例では、既存の関数に、処理の開始と終了を伝える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("何か処理を終了します。")