
235
6.5 デコレータ
... def spam():
... print('spam')
...
>>> spam()
spam
0.00011014938354492188
多くのラッパ関数は、元の関数と同じ引数を受け取り、その引数で元の関数を呼び出します。
>>> def spam_deco(func):
... def wrapper(ham, egg, bacon): #
ラッパ関数は
spam()
と同じ引数
... return func(ham, egg, bacon)
... return wrapper
...
>>> @spam_deco
... def spam(ham, egg, bacon):
... print('spam')
...
>>> spam('ham', 'egg', 'bacon')
どんな引数でも実行できる、汎用的なデコレータを作るときは、可変長引数を利用します。
>>> def spam_deco(func):
... def wrapper(*args, **kwargs):
... ...
... return func(*args, **kwargs) #
元関数を可変長引数を指定して呼び出す
... return wrapper
...
6.5.2
関数呼び出し形式のデコレータ
@
記号に続けてデコレータ関数を指定するのではなく、デコレータを返す関数呼び出し式も指定
できます。
@
デコレータ
(
引数
,
引数
, ...)
def
関数名
():
...
のように指定すると、次の処理と同じ結果となります。 ...