Python四種常用的高階函數(shù),你會(huì)用了嗎

1、什么是高階函數(shù)

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

例如:

def func1(x,y,f):

return f(x) +f(y)

num =func1(-10, 2, abs)

print(num)

注意:

把函數(shù)作為參數(shù)傳入的時(shí)候,不要再傳入函數(shù)后面解括號(hào)蹦哼,

abs代表這個(gè)取絕對(duì)值鳄哭,abs()表示調(diào)用這個(gè)函數(shù),獲取他的返回值

2纲熏、常用高階函數(shù)(map妆丘,filter,sorted局劲,reduce)

map? 映射函數(shù)

一般來說接受兩個(gè)函數(shù)勺拣,第一個(gè)函數(shù)使用作用的函數(shù),第二個(gè)參數(shù)是要作用的可迭代對(duì)象

返回值是一個(gè)迭代器

lst = [1,2,3,4,5,6,7]

lst2 = [10,100,1000,10000]

def f1(x,y):

return x + y

map后面可以接受多個(gè)可迭代對(duì)象鱼填,那傳入幾個(gè)可迭代對(duì)象药有,前面的函數(shù)就要接受幾個(gè)參數(shù)

print(list(map(f1,lst,lst2)))

print(list(map(lambda x,y:x+y, lst, lst2)))

例題:

有列表[1, 2, 3, 4, 5],將所有元素轉(zhuǎn)換成str: ['1', '2', '3', '4', '5']

lst = [1,2,3,4,5]

print(list(map(str,lst)))

filter? ?過濾函數(shù)

filter的第一個(gè)參數(shù)傳入一個(gè)函數(shù)苹丸,第二個(gè)參數(shù)是可迭代對(duì)象愤惰,將可迭代對(duì)象里的每一個(gè)值,交給傳入的函數(shù)處理赘理,如果結(jié)果為真宦言,就保留這個(gè)值。如果結(jié)果為假商模,就去掉這個(gè)值奠旺。

filter也是返回一個(gè)迭代器

例如:

去掉偶數(shù)蜘澜,保留奇數(shù)[1,2,3,4,5,6,7,8,9]

print(list(filter(lambda x : x % 2, [1,2,3,4,5,6,7,8,9])))

在一個(gè)list中,刪掉偶數(shù)响疚,只保留奇數(shù)

lst=['A','','B',None兼都,‘C’,' ','a',1,0]

print(list(filter(lambda x:x and str(x).strip(), lst)))

sorted? ? 排序函數(shù)

sorted()函數(shù)也是一個(gè)高階函數(shù)稽寒,它還可以接收一個(gè)key函數(shù)來實(shí)現(xiàn)自定義的排序key指定的函數(shù)將作用于list的每一個(gè)元素上扮碧,并根據(jù)key函數(shù)返回的結(jié)果進(jìn)行排序。

把一個(gè)序列中的字符串杏糙,忽略大小寫排序

序列:['bob', 'about', 'Zoo', 'Credit']

list1=['bob','about','Zoo','Credit']

print(sorted(list1,key=lambda x:x.lower()))

print(sorted(list1,key=str.lower))

按value來排序

d1 = {"a":3,"b":4,"c":2,"d":5}

print(dict(sorted(d1.items(),key=lambda x:x[1])))

列表里包的排序元素

在元組排序里為False排前面慎王,True排后面

reduce 函數(shù)累積求值?(這個(gè)函數(shù)用的時(shí)候需要導(dǎo)入)

這個(gè)函數(shù)必須接收兩個(gè)參數(shù)

reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算

例如:

將列表[1,3,5,7,9] ---->13579

from functools import reduce

s = [1,3,5,7,9]

print(reduce(lambda x,y:x*10+y, s))

練習(xí):

1、利用map批量檢測用戶名是否符合規(guī)范=> username符合規(guī)范, username不符合規(guī)范

只能包含數(shù)據(jù)宏侍、字母赖淤、下劃線,不以數(shù)字開頭谅河,長度在6-18之間

filter把合法的用戶名顯示出來

lst = ["username","a123","Y_78ju","23hu","was23_67hu"]

import re

def func1(x):

if re.findall(r"^[a-zA-Z_][0-9a-zA-Z_]{5,17}$", x):

return f"{x}符合規(guī)范"

else:

return f"{x}不符合規(guī)范"

print(list(map(func1, lst)))

print(list(filter(lambda x:re.findall(r"^[a-zA-Z_][0-9a-zA-Z_]{5,17}$", x), lst)))

2咱旱、 匿名函數(shù)+reduce實(shí)現(xiàn) 1*2*3*...*n

from functools import reduce

n=[1,2,3,4,5,6,7]

print(reduce(lambda n,y:n*y, n))

3、filter函數(shù):找出[1-100]能被3整除的數(shù)

print(list(filter(lambda x:x%3==0, range(1,101))))

4绷耍、map函數(shù):求list[1-10]各項(xiàng)的平方

print(list(map(lambda x:x*x, range(1,11))))

5吐限、將列表[1,4,5,9] 轉(zhuǎn)換成 '1459'的字符串

from functools import reduce

print(reduce(lambda x,y : str(x)+str(y),[1,4,5,9]))

6、有以下列表:

list1=[7, -8, 5, 4, 0, -2, -5]

正數(shù)在前負(fù)數(shù)在后

整數(shù)從小到大

負(fù)數(shù)從大到小

print(list(sorted(list1,key=lambda x:(x<=0, abs(x)))))

print(sorted(list1,key=lambda x:max(list1)-x+1 if x <=0 else x))

7褂始、這是一個(gè)字符串排序诸典,排序規(guī)則:小寫<大寫<奇數(shù)<偶數(shù)

s = 'asdf234GDSdsf23'?#排序:小寫-大寫-奇數(shù)-偶數(shù)

原理:先比較元組的第一個(gè)值,F(xiàn)ALSE

s = 'asdf234GDSdsf23'

s2 = "".join(sorted(s,key=lambda x: (x.isdigit(),x.isdigit()and int(x) % 2==0,x.isupper(),x)))

print(s2)

deffunc2(x):

return(x.isdigit() ,x.isupper(),x.isdigit()and int(x) % 2== 0,x)

print("".join(sorted(s,key=func2)))

#a -->(False,False,False,'a')

#s -->(False,False,False,'s')

#2 -->(True,True,False,2)

#3 -->(True,False,False,3)

#G -->(False,False,True,"G")

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崎苗,一起剝皮案震驚了整個(gè)濱河市狐粱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胆数,老刑警劉巖肌蜻,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異必尼,居然都是意外死亡蒋搜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門胰伍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來齿诞,“玉大人,你說我怎么就攤上這事骂租。” “怎么了斑司?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵渗饮,是天一觀的道長但汞。 經(jīng)常有香客問我,道長互站,這世上最難降的妖魔是什么私蕾? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮胡桃,結(jié)果婚禮上踩叭,老公的妹妹穿的比我還像新娘。我一直安慰自己翠胰,他們只是感情好容贝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著之景,像睡著了一般斤富。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锻狗,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天满力,我揣著相機(jī)與錄音,去河邊找鬼轻纪。 笑死油额,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刻帚。 我是一名探鬼主播悔耘,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼我擂!你這毒婦竟也來了衬以?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤校摩,失蹤者是張志新(化名)和其女友劉穎看峻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衙吩,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡互妓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坤塞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冯勉。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摹芙,靈堂內(nèi)的尸體忽然破棺而出灼狰,到底是詐尸還是另有隱情,我是刑警寧澤浮禾,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布交胚,位于F島的核電站份汗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝴簇。R本人自食惡果不足惜杯活,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熬词。 院中可真熱鬧旁钧,春花似錦、人聲如沸互拾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摩幔。三九已至彤委,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間或衡,已是汗流浹背焦影。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留封断,地道東北人斯辰。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像坡疼,于是被迫代替她去往敵國和親彬呻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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