自學Python教程【第七十一節】reduce 函數
歡迎大家來到自學Python教程教室,上一講我們學習Python的Python 中一個比較有意思的內置函數 map,這節課我們來了解Python中另一個類似的函數reduce 函數的相關內容,來看看吧:
map 可以看作是把一個序列根據某種規則,映射到另一個序列。reduce 做的事情就是把一個序列根據某種規則,歸納為一個輸出。
上例子。以前我們給過一個習題,求1累加到100的和。尋常的做法大概是這樣:
sum = 0 for i in xrange(1, 101): sum += i print sum
如果用 reduce 函數,就可以寫成:
lst = xrange(1, 101) def add(x, y): return x + y print reduce(add, lst)
解釋一下:
reduce(function, iterable[, initializer])
第一個參數是作用在序列上的方法,第二個參數是被作用的序列,這與 map 一致。另外有一個可選參數,是初始值。
function 需要是一個接收2個參數,并有返回值的函數。它會從序列 iterable 里從左到右依次取出元素,進行計算。每次計算的結果,會作為下次計算的第一個參數。
提供初始值 initializer 時,它會作為第一次計算的第一個參數。否則,就先計算序列中的前兩個值。
如果把剛才的 lst 換成 [1,2,3,4,5],那 reduce(add, lst) 就相當于 ((((1+2)+3)+4)+5)。
同樣,可以用 lambda 函數:
reduce((lambda x, y: x + y), xrange(1, 101))
所以,在對于一個序列進行某種統計操作的時候,比如求和,或者諸如統計序列中元素的出現個數等(可嘗試下如何用 reduce 做到),可以選擇使用 reduce 來實現。相對可以使代碼更簡潔。
我覺得,寫代碼的可讀性是很重要的事情,簡潔易懂的代碼,既容易讓別人看懂,也便于自己以后的維護。同時,較少的代碼也意味著比較高的開發效率和較少的出錯可能。應盡量避免寫混亂冗長的代碼。當然,也不用為了一味追求代碼的精簡,總是想方設法把代碼寫在一行里。那就又走了另一個極端,同樣也缺乏可讀性。而至于是否使用類似 map、reduce 這樣的方法,也是根據需要和個人習慣,我認為并沒有一定的規則限制。
順便說句,Python3 里,reduce已經被移出內置函數,使用 reduce 需要先通過 from functools import reduce 引入。
恭喜您在Python自學的道路上又堅持了一天,今天我們學習了Python中reduce 函數的相關內容,下節課我們將分享更多Python中的相關內容,敬請關注 !
好啦,今天的分享到這里就結束了,希望大家能夠持續關注馬哥教育官網,每天都會有大量優質內容與大家分享!
聲明:文章來源于網絡,侵刪!