使用reduce()
功能:
# forward-compatible import
from functools import reduce
result = reduce(lambda res, f: f(res), funcs, val)
reduce()
将第一个参数(可调用)应用于从第二个参数获取的每个元素,加上到目前为止的累计结果(如(result, element)
)。第三个参数是一个起始值(funcs
否则将使用的第一个元素)。
在Python 3中,内置函数被移到了functools.reduce()
location;为了向前兼容,Python 2.6及更高版本中提供了相同的参考。
其他语言可能将其称为折叠。
如果每个函数也需要 中间 结果,请使用itertools.accumulate()
(仅从Python 3.3开始,用于带有函数参数的版本):
from itertools import accumulate, chain
running_results = accumulate(chain(val, funcs), lambda res, f: f(res))