Pythonのデコレータは、関数やメソッドの振る舞いを変更するために使用される特殊な機能です。デコレータは、関数を引数として受け取り、新しい関数を返す関数です。デコレータは、@
記号を使用して簡単に適用することができます。
以下に、Pythonでよく使われるデコレータの一覧とその使用例を示します。
関数デコレータの作成
デコレータを作成する基本的な方法は、関数を受け取り、別の関数を返す関数を定義することです。例えば、以下のように関数の実行時間を計測するデコレータを作成できます。
import time
def timer_decorator(func):
def wrapper():
start_time = time.time()
func()
print("Elapsed time:", time.time() - start_time)
return wrapper
引数を受け取る関数デコレータ
引数を受け取る関数を修飾するためのデコレータも作成できます。これには、*args
と**kwargs
を使用して、任意の数の引数を受け取るラッパー関数を定義します。
def print_args_decorator(func):
def wrapper(*args, **kwargs):
print("Arguments:", args, kwargs)
return func(*args, **kwargs)
return wrapper
このデコレータは、関数が呼び出される際の引数を表示するだけでなく、元の関数に引数をそのまま渡します。
@wrapsでメタデータの保持
デコレータを使用する際、元の関数のメタデータ(名前やドキュメントなど)が失われることがあります。これを防ぐためには、functools
モジュールの@wraps
デコレータを使用します。
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# do something before
result = func(*args, **kwargs)
# do something after
return result
return wrapper
これにより、ラッパー関数が元の関数のメタデータを保持します。
以上がPythonのデコレータの一覧とその使用例です。これらのデコレータを理解し、適切に使用することで、Pythonコードのパワーアップや整理が可能になります。