gpt4 book ai didi

python - 二元运算符到多运算符装饰器

转载 作者:行者123 更新时间:2023-11-28 19:57:54 30 4
gpt4 key购买 nike

假设我有一个作为二元运算符 (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

显然,我不能不提一下有关装饰器的问题,这个 answer .

.

我已经尝试编写自己的代码,但不能完全使其正常工作,也欢迎对我哪里出错的任何解释:

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) .

最佳答案

reduce() 浮现在脑海中:

from functools import wraps

def binop_to_multiop(binop):
@wraps(binop)
def multiop(x, *xs):
return reduce(binop, xs, x)
return multiop

# ...

@binop_to_multiop
def mult(a, b):
return a * b

print mult(2, 3, 4)
print mult(7)
print mult(2, 3)

结果:

$ python multiop.py
24
7
6

关于python - 二元运算符到多运算符装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12574001/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com