gpt4 book ai didi

python - 是否有一种 pythonic 方式来链接这些函数调用?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:56 26 4
gpt4 key购买 nike

我有一些代码,其中我得到了一个二进制函数列表和一个值列表,我需要像这样链接调用:

funs = [..]
vals = [..]

result = funs[0](vals[0],
funs[1](vals[1],
..
funs[-1](vals[-2], vals[-1])))))..)

举个简单的例子,如果:

funs = [operator.add, operator.mul]
vals = [1, 2, 3]

那么 result 应该最终评估 add(1, mul(2, 3)),产生 7。我可以写一个 for 循环评估每个中间结果,这既简单又令人难以置信地不满意:

result = vals[-1]
for val, fun in reversed(zip(vals[:-1], funs)):
result = fun(val, result)

什么是 Pythonic 方式?或者这样就可以了吗?

最佳答案

这看起来与 reduce 所做的非常相似,但每次使用的函数都会不同,因此一种解决方案是创建一个对象,每次调用它时使用不同的函数:

class Cycled_Functions:
def __init__(self,functions):
self.functions = iter(functions)
def __call__(self,*args,**kw):
f = next(self.functions) #will raise StopIteration at some point
return f(*args,**kw)

然后 Cycled_Functions(reversed(FUNCTIONS)) 将适合与 reduce 一起使用来完成您的任务:

import operator
from functools import reduce

funs = [operator.add, operator.mul]
vals = [1, 2, 3]

f = Cycled_Functions(reversed(funs))

print(reduce(f, reversed(vals)))

我仍然更喜欢你的基本循环,但这是我认为值得提供的替代方案。

关于python - 是否有一种 pythonic 方式来链接这些函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27773023/

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