私が書いているデコレーターの場合、関数の特定の名前付きパラメーターを操作したいと思います。次のデコレータを検討してください。
def square_param(param):
def func_decorator(func):
def func_caller(*args,**kwargs):
kwargs[param] = kwargs[param] * kwargs[param]
return func(*args,**kwargs)
return func_caller
return func_decorator
次の関数に適用:
@square_param('dividend')
def quotient(divisor=1,dividend=0):
return dividend/divisor
これは、被除数がキーワード引数として呼び出された場合に機能します。例:
>>> quotient(dividend=2)
4
ただし、位置引数として指定すると、これは失敗します。
>>> quotient(3,4)
TypeError: quotient() got multiple values for keyword argument 'dividend'
Python 3 では、パラメータを常にキーワードとして指定することでこれを解決できました。
@square_param('dividend')
def quotient(divisor=1,*,dividend=0):
return dividend/divisor
しかし、私は Python 2 をサポートしたいと思います。また、機能に少し制限を加えたいと思っています。
デコレータでこの動作を修正する方法はありますか?