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コードのパワーアップや整理が可能になります。

投稿者 admin

コメントを残す

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