Python超屌的內(nèi)置函數(shù)(分享六個(gè))

1捌木、Lambda函數(shù)

Lambda函數(shù)用于創(chuàng)建匿名函數(shù)沃疮,即沒有名稱的函數(shù)葫辐。它只是一個(gè)表達(dá)式章喉,函數(shù)體比def簡(jiǎn)單很多汗贫。當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來執(zhí)行單個(gè)操作并且可以在一行中編寫時(shí)身坐,就可以用到匿名函數(shù)了。

lambda [arg1 [,arg2,.....argn]]:expression

lambda的主體是一個(gè)表達(dá)式芳绩,而不是一個(gè)代碼塊掀亥。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。例如:

lambda x: x+2

如果我們也想像def定義的函數(shù)隨時(shí)調(diào)用妥色,可以將lambda函數(shù)分配給這樣的函數(shù)對(duì)象搪花。

add = lambda x: x+2

add(10)

輸出結(jié)果:

利用Lambda函數(shù),可以將代碼簡(jiǎn)化很多嘹害,具體再舉個(gè)例子撮竿。

如上圖所示,結(jié)果列表newlist是使用lambda函數(shù)用一行代碼生成的笔呀。


2幢踏、Map函數(shù)

map()函數(shù)會(huì)將一個(gè)函數(shù)映射到一個(gè)輸入列表的所有元素上。

map(function,iterable)

比如我們先創(chuàng)建了一個(gè)函數(shù)來返回一個(gè)大寫的輸入單詞许师,然后將此函數(shù)應(yīng)有到列表colors中的所有元素房蝉。

def makeupper(word):

? ? return word.upper()

colors=['red','yellow','green','black']

colors_uppercase=list(map(makeupper,colors))

colors_uppercase

此外,我們還可以使用匿名函數(shù)lambda來配合map函數(shù)微渠,這樣可以更加精簡(jiǎn)搭幻。

colors=['red','yellow','green','black']

colors_uppercase=list(map(lambda x: x.upper(),colors))

colors_uppercase

如果我們不用Map函數(shù)的話,就需要使用for循環(huán)逞盆。

如上圖所示檀蹋,在實(shí)際使用中Map函數(shù)會(huì)比for循環(huán)依次列表元素的方法快1.5倍


3云芦、Reduce函數(shù)

當(dāng)需要對(duì)一個(gè)列表進(jìn)行一些計(jì)算并返回結(jié)果時(shí)俯逾,reduce()是個(gè)非常有用的函數(shù)。舉個(gè)例子舅逸,當(dāng)需要計(jì)算一個(gè)整數(shù)列表所有元素的乘積時(shí)桌肴,即可使用reduce函數(shù)實(shí)現(xiàn)。[1]

它與函數(shù)的最大的區(qū)別就是琉历,reduce()里的映射函數(shù)(function)接收兩個(gè)參數(shù)识脆,而map接收一個(gè)參數(shù)。

reduce(function, iterable[, initializer])

接下來我們用實(shí)例來演示reduce()的代碼執(zhí)行過程善已。

from functools import reduce

def add(x, y) :? # 兩數(shù)相加

? ? return x + y

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

sum1 = reduce(add, numbers)? # 計(jì)算列表和

得到結(jié)果sum1 = 15

我們會(huì)看到,reduce將一個(gè)相加函數(shù)add()作用在一個(gè)列表[1,2,3,4,5]上离例,映射函數(shù)接收了兩個(gè)參數(shù)换团,reduce()把結(jié)果繼續(xù)和列表的下一個(gè)元素做累加計(jì)算

此外宫蛆,我們同樣可以使用匿名函數(shù)lambda來配合reduce函數(shù)艘包,這樣可以更加精簡(jiǎn)的猛。

from functools import reduce

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

sum2 = reduce(lambda x, y: x+y, numbers)

得到輸出sum2= 15,與之前結(jié)果保持一致想虎。

需要注意:Python3.x開始reduce()已經(jīng)被移到functools模塊里[2]卦尊,如果我們要使用,需要用from functools import reduce導(dǎo)入.


4舌厨、enumerate 函數(shù)

enumerate()函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表岂却、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)裙椭,一般用在for循環(huán)當(dāng)中躏哩。它的語法如下所示:

enumerate(iterable, start=0)

它的兩個(gè)參數(shù),一個(gè)是序列揉燃、迭代器或其他支持迭代對(duì)象扫尺;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開始炊汤,也可以自定義計(jì)數(shù)器的起始編號(hào)正驻。

colors = ['red', 'yellow', 'green', 'black']

result = enumerate(colors)

如果我們有一個(gè)存放colors的顏色列表,運(yùn)行后就會(huì)得到一個(gè)enumerate(枚舉) 對(duì)象抢腐。它可以直接在for循環(huán)中使用姑曙,也可以轉(zhuǎn)換為列表,具體用法如下所示氓栈。

for count, element in result:

? ? print(f"迭代編號(hào):{count},對(duì)應(yīng)元素:{element}")


5渣磷、Zip函數(shù)

zip()函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組授瘦,然后返回由這些元組組成的列表[3]醋界。

我們還是用兩個(gè)列表作為例子演示:

colors = ['red', 'yellow', 'green', 'black']

fruits = ['apple', 'pineapple', 'grapes', 'cherry']

for item in zip(colors,fruits):

? ? ????print(item)

輸出結(jié)果:

當(dāng)我們使用zip()函數(shù)時(shí),如果各個(gè)迭代器的元素個(gè)數(shù)不一致提完,則返回列表長度與最短的對(duì)象相同形纺。

prices =[100,50,120]

for item in zip(colors,fruits,prices):

? ? ????print(item)


6、Filter函數(shù)

filter()函數(shù)用于過濾序列徒欣,過濾掉不符合條件的元素逐样,返回由符合條件元素組成的新列表,其語法如下所示打肝。

filter(function, iterable)

比如舉個(gè)例子脂新,我們可以先創(chuàng)建一個(gè)函數(shù)來檢查單詞是否為大寫,然后使用filter()函數(shù)過濾出列表中的所有奇數(shù):

def is_odd(n):

? ? ????return n % 2 == 1

old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

new_list = filter(is_odd, old_list)

print(newlist)

輸出結(jié)果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粗梭,一起剝皮案震驚了整個(gè)濱河市争便,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌断医,老刑警劉巖滞乙,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奏纪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡斩启,警方通過查閱死者的電腦和手機(jī)序调,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兔簇,“玉大人发绢,你說我怎么就攤上這事∧腥停” “怎么了朴摊?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長此虑。 經(jīng)常有香客問我甚纲,道長,這世上最難降的妖魔是什么朦前? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任介杆,我火速辦了婚禮,結(jié)果婚禮上韭寸,老公的妹妹穿的比我還像新娘春哨。我一直安慰自己,他們只是感情好恩伺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布赴背。 她就那樣靜靜地躺著,像睡著了一般晶渠。 火紅的嫁衣襯著肌膚如雪凰荚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天褒脯,我揣著相機(jī)與錄音便瑟,去河邊找鬼。 笑死番川,一個(gè)胖子當(dāng)著我的面吹牛到涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颁督,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼践啄,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了沉御?” 一聲冷哼從身側(cè)響起往核,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚷节,沒想到半個(gè)月后聂儒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫痰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年衩婚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片效斑。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡非春,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缓屠,到底是詐尸還是另有隱情奇昙,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布敌完,位于F島的核電站储耐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏滨溉。R本人自食惡果不足惜什湘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晦攒。 院中可真熱鬧闽撤,春花似錦、人聲如沸脯颜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栋操。三九已至闸餐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讼庇,已是汗流浹背绎巨。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蠕啄,地道東北人场勤。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像歼跟,于是被迫代替她去往敵國和親和媳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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