reduce函数实现函数对象对参数运算以后输出结果的累积计算函数
函数导入:spa
1 from functools import reduce
函数调用:code
1 def add(x, y): 2 return x+y 3 4 print(reduce(add, [1,2,3,4,5]))
1 reduce(lambda x, y: x+y, [1,2,3,4,5]) 2 Out[1]: 15
上面二者等价对象
下面解释更复杂的使用情形:blog
1 def a(x, y): 2 return x + y 3 def b(x): 4 x /= 3 5 return x+0.2 6 def c(x): 7 x %= 2 8 return x
调用函数:class
1 reduce(lambda f, g: lambda *w, **kw: g(f(*w, **kw)), [a, b])(1,2) 2 Out[2]: 1.2
这里依次传入了函数a,b,返回的是一个函数,因此后面加括号调用。import
1 reduce(lambda f, g: lambda *w, **kw: g(f(*w, **kw)), [a, b])(1,8) 2 Out[3]: 3.2 3 reduce(lambda f, g: lambda *w, **kw: g(f(*w, **kw)), [a, b, c])(1,8) 4 Out[4]: 1.2000000000000002
这里的reduce实现了a、b、c三个函数的链接---->c( b( a() ) ),而前面的咱们计算了[1,2,3,4,5]的累积和,这里咱们怎么计算呢?lambda
1 d = reduce(lambda f, g: lambda *w, **kw: g(f(*w, **kw)), [a, b, c]) 2 reduce(d, [1,8,10]) 3 Out[5]: 1.9333333333333331
上面的问题能够这样实现,还有没有其余方法直接实现呢?目前尚未发现直接在一个reduce里面累积函数和参数的方式,若是有也但愿你们留言提醒!方法