Python 高階函數(shù)(持續(xù)更新)

1、map()是 Python 內(nèi)置的高階函數(shù),它接收一個(gè)函數(shù) f和一個(gè)list,并通過(guò)把函數(shù) f 依次作用在 list 的每個(gè)元素上,得到一個(gè)新的 list 并返回。

例如,對(duì)于list [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果希望把list的每個(gè)元素都作平方,就可以用map()函數(shù):

因此,我們只需要傳入函數(shù)f(x)=x*x,就可以利用map()函數(shù)完成這個(gè)計(jì)算:

def f(x):

? ? return x*x

print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

輸出結(jié)果:

[1, 4, 9, 10, 25, 36, 49, 64, 81]

注意:map()函數(shù)不改變?cè)械?list,而是返回一個(gè)新的 list。

利用map()函數(shù),可以把一個(gè) list 轉(zhuǎn)換為另一個(gè) list,只需要傳入轉(zhuǎn)換函數(shù)。

由于list包含的元素可以是任何類(lèi)型,因此,map() 不僅僅可以處理只包含數(shù)值的 list,事實(shí)上它可以處理包含任意類(lèi)型的 list,只要傳入的函數(shù)f可以處理這種數(shù)據(jù)類(lèi)型。

2、reduce()函數(shù)也是Python內(nèi)置的一個(gè)高階函數(shù)。reduce()函數(shù)接收的參數(shù)和 map()類(lèi)似,一個(gè)函數(shù) f,一個(gè)list,但行為和 map()不同,reduce()傳入的函數(shù) f 必須接收兩個(gè)參數(shù),reduce()對(duì)list的每個(gè)元素反復(fù)調(diào)用函數(shù)f,并返回最終結(jié)果值。

例如,編寫(xiě)一個(gè)f函數(shù),接收x和y,返回x和y的和:

def f(x, y):

? ? return x + y

調(diào)用reduce(f, [1, 3, 5, 7, 9])時(shí),reduce函數(shù)將做如下計(jì)算:

先計(jì)算頭兩個(gè)元素:f(1, 3),結(jié)果為4;

再把結(jié)果和第3個(gè)元素計(jì)算:f(4, 5),結(jié)果為9;

再把結(jié)果和第4個(gè)元素計(jì)算:f(9, 7),結(jié)果為16;

再把結(jié)果和第5個(gè)元素計(jì)算:f(16, 9),結(jié)果為25;

由于沒(méi)有更多的元素了,計(jì)算結(jié)束,返回結(jié)果25。

上述計(jì)算實(shí)際上是對(duì) list 的所有元素求和。雖然Python內(nèi)置了求和函數(shù)sum(),但是,利用reduce()求和也很簡(jiǎn)單。

reduce()還可以接收第3個(gè)可選參數(shù),作為計(jì)算的初始值。如果把初始值設(shè)為100,計(jì)算:

reduce(f, [1, 3, 5, 7, 9], 100)

結(jié)果將變?yōu)?25,因?yàn)榈谝惠営?jì)算是:

計(jì)算初始值和第一個(gè)元素:f(100, 1),結(jié)果為101。

3、filter()函數(shù)是?Python?內(nèi)置的另一個(gè)有用的高階函數(shù),filter()函數(shù)接收一個(gè)函數(shù) f?和一個(gè)list,這個(gè)函數(shù)?f?的作用是對(duì)每個(gè)元素進(jìn)行判斷,返回 True或 False,filter()根據(jù)判斷結(jié)果自動(dòng)過(guò)濾掉不符合條件的元素,返回由符合條件元素組成的新list。

例如,要從一個(gè)list [1, 4, 6, 7, 9, 12, 17]中刪除偶數(shù),保留奇數(shù),首先,要編寫(xiě)一個(gè)判斷奇數(shù)的函數(shù):

def is_odd(x):

? ? return x % 2 == 1

然后,利用filter()過(guò)濾掉偶數(shù):

filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

結(jié)果:[1, 7, 9, 17]

利用filter(),可以完成很多有用的功能,例如,刪除 None 或者空字符串:

def is_not_empty(s):

? ? return s and len(s.strip()) > 0

filter(is_not_empty, ['test', None, '', 'str', '? ', 'END'])

結(jié)果:['test', 'str', 'END']

注意:s.strip(rm) 刪除 s 字符串中開(kāi)頭、結(jié)尾處的 rm 序列的字符。

當(dāng)rm為空時(shí),默認(rèn)刪除空白符(包括'\n', '\r', '\t', ' '),如下:

a = '? ? 123'

a.strip()

結(jié)果:'123'

a='\t\t123\r\n'a.strip()

結(jié)果:'123'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文/以琳_ 少年聽(tīng)曲懷春夢(mèng),不解春殤痛。 青年聽(tīng)曲冷衾中,淚染枕巾、點(diǎn)點(diǎn)雨卷風(fēng)。 而今聽(tīng)曲西窗下,只嘆幽幽夜。...
    以琳_閱讀 538評(píng)論 5 27
  • 每當(dāng)掙扎著做一件事時(shí),都會(huì)很無(wú)奈的問(wèn)自己,是否下一秒的到來(lái),非得用這樣的儀式歡迎不可。 答案是:是。 有時(shí)想,如若...
    唐妮兒閱讀 272評(píng)論 4 2
  • 那么我們今天就來(lái)講一下音素分類(lèi)中的元音:)在這之前呢,我們首先來(lái)了解一下會(huì)常用到的發(fā)音器官。 發(fā)音器官包括口腔、舌...
    東東簡(jiǎn)簡(jiǎn)閱讀 400評(píng)論 0 0

友情鏈接更多精彩內(nèi)容