Pythonのデコレータは、関数やメソッドの前後に特定の処理を追加して拡張するための機能です。デコレータは、通常、@decoratorという構文を使用して関数やメソッドの定義の直前に適用されます。

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("start")
        func(*args, **kwargs)
        print("end")
    return wrapper

@my_decorator
def say_hello():
    print("hello")

say_hello()

上記の例では、say_hello関数の前後にstartendを出力するデコレータを適用しています。

デコレータ内で*args**kwargsを使用すると、任意の数の位置引数やキーワード引数を受け取ることができます。これにより、デコレータが元の関数の引数の数や種類に影響されないことを保証します。

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print('--- decorator before my_func ---')
        my_func(*args, **kwargs)
        print('--- decorator after my_func ---\\n')
    return wrapper

@my_decorator
def print_hello(a, b):
    print('my function hello world')

print_hello(1, 2)
print_hello(a=1, b=2)

上記の例では、print_hello関数に引数を渡すと、デコレータ内のwrapper関数でもそれらの引数を受け取ることができます。

このように、Pythonのデコレータとargs, kwargsを理解し活用することで、コードの再利用性と可読性を向上させることができます。

投稿者 admin

コメントを残す

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