假设我有一个已编写为二进制运算符 (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
)。