デコレータ関数とデコレータ引数の使用法


def decorator_function(arg1, arg2):
    def decorator_wrapper(func):
        def wrapper(*args, kwargs):
            # デコレータ関数の前処理
            print(f"Decorator arguments: {arg1}, {arg2}")

            # デコレータ関数が修飾する関数の実行
            result = func(*args, kwargs)

            # デコレータ関数の後処理
            print("Decorator cleanup")

            return result
        return wrapper
    return decorator_wrapper
@decorator_function("arg1_value", "arg2_value")
def decorated_function():
    print("Hello, world!")
decorated_function()

上記のコードでは、decorator_function というデコレータ関数を定義し、arg1arg2 を引数として受け取ります。このデコレータ関数は、decorated_function という関数を修飾します。

decorator_function は、decorator_wrapper という関数を内部で定義し、これが実際にデコレータとして機能します。decorator_wrapper 関数は、func という引数として修飾する関数を受け取ります。そして、wrapper 関数を定義して返します。

wrapper 関数は、デコレータ関数の前処理、修飾する関数の実行、および後処理を行います。具体的な処理はコード内に記述されています。

@decorator_function("arg1_value", "arg2_value") のように、デコレータ関数を使って decorated_function を修飾することができます。この場合、デコレータ関数には引数として "arg1_value""arg2_value" を渡します。

上記のコードを実行すると、以下の出力が得られます。

Decorator arguments: arg1_value, arg2_value
Hello, world!
Decorator cleanup

これにより、デコレータ関数が修飾する関数の前後に特定の処理を追加することができます。デコレータ引数を使用することで、デコレータの動作を柔軟にカスタマイズすることができます。

このように、デコレータ関数とデコレータ引数は、Pythonで再利用可能なコードを作成するための強力なツールです。