Learn Python 3:高階函數(shù)

把函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù)

以下是常用的高階函數(shù):

1狸臣、map

一般情況map()函數(shù)接收兩個參數(shù)蹋砚,一個函數(shù)(該函數(shù)接收一個參數(shù)),一個序列化焕,將傳入的函數(shù)依次作用到序列的每個元素萄窜,并返回一個新的Iterator(迭代器)

例如有這樣一個list:['pYthon', 'jaVa', 'kOtlin'],現(xiàn)在要把list中每個元素首字母改為大寫撒桨,其它的改為小寫查刻,可以這樣操作:

>>> def f(s):
...    return s.title()
... 
>>> l = map(f, ['pYthon', 'jaVa', 'kOtlin'])
>>> list(l)
['Python', 'Java', 'Kotlin']

由于l是一個Iterator,所以通過list()函數(shù)計(jì)算出整個序列凤类,并返回一個list穗泵,當(dāng)然也可以通過next(l)逐個取出l中的元素。

上邊的f()谜疤,函數(shù)只有一個參數(shù)佃延,如果有多個參數(shù),那么map()函數(shù)就可以接收一個函數(shù)以及對應(yīng)函數(shù)參數(shù)個數(shù)的序列夷磕,例如map()函數(shù)接收的函數(shù)有兩個參數(shù)時履肃,可以再傳入兩個序列,這時兩個序列就是函數(shù)的兩個參數(shù)值坐桩,例如:

>>> def f(x, y):
...    return x + y
... 
>>> list(map(f, [1, 2, 3],[4, 5, 6]))
[5, 7, 9]

2尺棋、reduce

和map()用法類似,reduce把傳入的函數(shù)作用在一個序列上绵跷,但傳入的函數(shù)需要接收兩個參數(shù)膘螟,傳入函數(shù)的計(jì)算結(jié)果繼續(xù)和序列的下一個元素做累積計(jì)算。

例如有一個list抖坪,里邊的元素都是字符串萍鲸,要把它拼接成一個字符串:

>>> from functools import reduce
>>> def f(x, y):
...    return x + y
... 
>>> reduce(f, ['ab', 'c', 'de', 'f'])
'abcdef'

3、filter

filter()同樣接收一個函數(shù)和一個序列擦俐,然后把傳入的函數(shù)依次作用于序列的每個元素脊阴,如果傳入的函數(shù)返回true則保留元素,否則丟棄蚯瞧,最終返回一個Iterator嘿期。

例如一個list中元素有純字母、純數(shù)字埋合、字母數(shù)字組合的备徐,我們要保留純字母的:

>>> def f(s):
...    return s.isalpha()
... 
>>> l = filter(f, ['abc', 'xyz', '123kg', '666'])
>>> list(l)
['abc', 'xyz']

4、sorted

sorted()函數(shù)就是用來排序的甚颂,同時可以自己定義排序的規(guī)則蜜猾。

例如:

>>> sorted([6, -2, 4, -1])
[-2, -1, 4, 6]

這里默認(rèn)按照數(shù)字從小到大的順序排列秀菱。如果需要修改排序規(guī)則為按照絕對值排列可以新增一個key參數(shù),代表排序規(guī)則的函數(shù):

>>> sorted([6, -2, 4, -1], key=abs)
[-1, -2, 4, 6]

因?yàn)槟J(rèn)是升序排列蹭睡,如果要改為降序可使用reverse參數(shù):

>>> sorted([6, -2, 4, -1], key=abs, reverse=True)
[6, 4, -2, -1]

如果是字符串序列則默認(rèn)按照元素首字母的ASCII的大小衍菱,升序排列:

>>> sorted(['Windows', 'iOS', 'Android'])
['Android', 'Windows', 'iOS']

如果需要忽略大小寫,可以指定key=str.lower或者key=str.upper來完成肩豁。

有一個姓名脊串、身高對應(yīng)關(guān)系的list,其中每個元素是tuple清钥,現(xiàn)在要按照身高升序排列l(wèi)ist:

>>> d = [('Tom', 170), ('Jim', 175), ('Andy', 168), ('Bob', 185)]
>>> def by_height(t):
...     return t[1]
... 
>>> sorted(d, key=by_height)
 [('Andy', 168), ('Tom', 170), ('Jim', 175),  ('Bob', 185)]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琼锋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祟昭,更是在濱河造成了極大的恐慌缕坎,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件从橘,死亡現(xiàn)場離奇詭異念赶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恰力,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門叉谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踩萎,你說我怎么就攤上這事停局。” “怎么了香府?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵董栽,是天一觀的道長。 經(jīng)常有香客問我企孩,道長锭碳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任勿璃,我火速辦了婚禮擒抛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘补疑。我一直安慰自己歧沪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布莲组。 她就那樣靜靜地躺著诊胞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锹杈。 梳的紋絲不亂的頭發(fā)上撵孤,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天迈着,我揣著相機(jī)與錄音,去河邊找鬼邪码。 笑死寥假,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的霞扬。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼枫振,長吁一口氣:“原來是場噩夢啊……” “哼喻圃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粪滤,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤斧拍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杖小,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肆汹,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年予权,在試婚紗的時候發(fā)現(xiàn)自己被綠了昂勉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡扫腺,死狀恐怖岗照,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笆环,我是刑警寧澤攒至,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站躁劣,受9級特大地震影響迫吐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜账忘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一志膀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闪萄,春花似錦梧却、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至圆裕,卻和暖如春广鳍,著一層夾襖步出監(jiān)牢的瞬間荆几,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工赊时, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吨铸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓祖秒,卻偏偏與公主長得像诞吱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竭缝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容