Python:デコレータと *args, **kwargs の使い方メモ

ということで、付けると引数の値を出力するデコレータのコードを例として書き留めておきます。

from functools import wraps

def print_params(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        for v in args:
          print(v)
        for k, v in kwargs.items():
          print(k,'=',v)
        func(*args, **kwargs)
    return wrapper

@print_params
def hoge(a, b, c, d = 'test'):
    print('hoge hoge')

hoge(1, [2, 3], { 'first name': 'Taroh', 'last name': 'Yamada' }, d = 'abcd')

結果

1
[2, 3]
{'first name': 'Taroh', 'last name': 'Yamada'}
d = abcd
hoge hoge

functools.wraps は、対象の関数の __name__ や __doc__ が失われないように付けます。

Docker Desktop for Windows/Macでつくるクリーンな開発環境構築入門(Python版) (Amazon)

コメント