亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

自學(xué)Python教程【第七十一節(jié)】reduce 函數(shù)

歡迎大家來到自學(xué)Python教程教室,上一講我們學(xué)習(xí)Python的Python 中一個(gè)比較有意思的內(nèi)置函數(shù) map,這節(jié)課我們來了解Python中另一個(gè)類似的函數(shù)reduce 函數(shù)的相關(guān)內(nèi)容,來看看吧:

map 可以看作是把一個(gè)序列根據(jù)某種規(guī)則,映射到另一個(gè)序列。reduce 做的事情就是把一個(gè)序列根據(jù)某種規(guī)則,歸納為一個(gè)輸出。

上例子。以前我們給過一個(gè)習(xí)題,求1累加到100的和。尋常的做法大概是這樣:

sum = 0

for i in xrange(1, 101):

sum += i

print sum

如果用 reduce 函數(shù),就可以寫成:

lst = xrange(1, 101)

def add(x, y):

return x + y

print reduce(add, lst)

解釋一下:

reduce(function, iterable[, initializer])

第一個(gè)參數(shù)是作用在序列上的方法,第二個(gè)參數(shù)是被作用的序列,這與 map 一致。另外有一個(gè)可選參數(shù),是初始值。

function 需要是一個(gè)接收2個(gè)參數(shù),并有返回值的函數(shù)。它會(huì)從序列 iterable 里從左到右依次取出元素,進(jìn)行計(jì)算。每次計(jì)算的結(jié)果,會(huì)作為下次計(jì)算的第一個(gè)參數(shù)。

提供初始值 initializer 時(shí),它會(huì)作為第一次計(jì)算的第一個(gè)參數(shù)。否則,就先計(jì)算序列中的前兩個(gè)值。

如果把剛才的 lst 換成 [1,2,3,4,5],那 reduce(add, lst) 就相當(dāng)于 ((((1+2)+3)+4)+5)。

同樣,可以用 lambda 函數(shù):

reduce((lambda x, y: x + y), xrange(1, 101))

所以,在對(duì)于一個(gè)序列進(jìn)行某種統(tǒng)計(jì)操作的時(shí)候,比如求和,或者諸如統(tǒng)計(jì)序列中元素的出現(xiàn)個(gè)數(shù)等(可嘗試下如何用 reduce 做到),可以選擇使用 reduce 來實(shí)現(xiàn)。相對(duì)可以使代碼更簡潔。

我覺得,寫代碼的可讀性是很重要的事情,簡潔易懂的代碼,既容易讓別人看懂,也便于自己以后的維護(hù)。同時(shí),較少的代碼也意味著比較高的開發(fā)效率和較少的出錯(cuò)可能。應(yīng)盡量避免寫混亂冗長的代碼。當(dāng)然,也不用為了一味追求代碼的精簡,總是想方設(shè)法把代碼寫在一行里。那就又走了另一個(gè)極端,同樣也缺乏可讀性。而至于是否使用類似 map、reduce 這樣的方法,也是根據(jù)需要和個(gè)人習(xí)慣,我認(rèn)為并沒有一定的規(guī)則限制。

順便說句,Python3 里,reduce已經(jīng)被移出內(nèi)置函數(shù),使用 reduce 需要先通過 from functools import reduce 引入。

恭喜您在Python自學(xué)的道路上又堅(jiān)持了一天,今天我們學(xué)習(xí)了Python中reduce 函數(shù)的相關(guān)內(nèi)容,下節(jié)課我們將分享更多Python中的相關(guān)內(nèi)容,敬請(qǐng)關(guān)注 !

好啦,今天的分享到這里就結(jié)束了,希望大家能夠持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會(huì)有大量優(yōu)質(zhì)內(nèi)容與大家分享!

聲明:文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!