デコレータについては、関数の特定の名前付きパラメータを操作したいと思います。以下のデコレータを考えてみましょう:Python 2で位置引数をキーワード引数として扱うにはどうすればいいですか?
次の機能に適用さ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
位置の引数は失敗します。
@square_param('dividend')
def quotient(divisor=1,*,dividend=0):
return dividend/divisor
が、私は、Python 2をサポートしたいと思いますし、また、私は機能上、わずかな制限をつけたいと思います:私は、パラメータを強制することでこの問題を解決できたのPython 3では
>>> quotient(3,4)
TypeError: quotient() got multiple values for keyword argument 'dividend'
はalways given as a keywordされるように。
デコレータでこの動作を修正できる方法はありますか?
のparams機能を得ることができます。それはあなたがこれに必要なものを持っているかもしれません。 getargspecを見てください。 – Dirk