python--reduce()函數

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裏面累積函數和參數的方式,若是有也但願你們留言提醒!方法

相關文章
相關標籤/搜索