二項演算子(binop)として記述した関数があるとすると、任意の数の引数を取る複数演算子(multiop)に拡張するにはどうすればよいですか?ライブラリ( functoolsなど)にそのようなデコレータはありますか?
たとえば(デコレータにこの動作を提供してもらいたい):
@binop_to_multiop
def mult(a,b):
return a*b
mult(2,3,4) # 2*3*4 = 24
mult(7) # 7
mult(2,3) # 6
明らかに、私はデコレータについて言及せずに質問することはできません、この答え。
。
私は自分で書いてみましたが、うまく機能させることができません。どこが間違っているのかについての説明も歓迎します。
def binop_to_multiop(f):
@functools.wraps(f)
def wrapper(*args, **kwds):
if len(args) == 1: return args[0] # fails
return f(args[0],(f(*args[1:], **kwds)), **kwds) #recursion attempt fails
return wrapper
(さまざまな)を与えます。TypeError: mult() takes exactly 2 arguments (N given)
N!=2