Python reduce函數

搜了很多介紹,很多解釋者也給了很多例子,但是總感覺模模糊糊的,直到看到官方的原函數,豁然開朗。

 

官方解釋:

將一個可迭代的對象應用到一個帶有兩個參數的方法上,我們稱之爲appFun,遍歷這個可迭代對象,將其中的元素依次作爲appFun的參數,但這個函數有兩個參數,作爲哪個參數呢?有這樣的規則,看一下下面reduce方法的實現,有三個參數,第一個參數就是上面說的appFun,第二個參數就是那個可迭代的對象,而第三個呢?當調用reduce方法的時候給出了initializer這個參數,那麼第一次調用appFun的時候這個參數值就作爲第一個參數,而可迭代對象的元素依次作爲appFun的第二個參數;如果調用reduce的時候沒有給出initializer這個參數,那麼第一次調用appFun的時候,可迭代對象的第一個元素就作爲appFun的第一個元素,而可迭代器的從第二個元素到最後依次作爲appFun的第二個參數,除第一次調用之外,appFun的第一個參數就是appFun的返回值了。例如reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]),計算1到5的和,因爲沒有給定initializer參數,所以第一次調用x+y時,x=1,即列表的第一個元素,y=2,即列表的第二個元素,之後返回的1+2的結果作爲第二次調用x+y中的x,即上一次的結果,y=2,即第二個元素,依次類推,知道得到1+2+3+4+5的結果。


 def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        try:
            initializer = next(it)
        except StopIteration:
            raise TypeError('reduce() of empty sequence with no initial value')
    accum_value = 0
    for x in iterable:
        accum_value = function(accum_value, x)
    return accum_value

 

發佈了56 篇原創文章 · 獲贊 19 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章