Python中號稱神仙的六個(gè)內(nèi)置函數(shù)詳解
人生苦短,菜鳥學(xué)Python!
今天,我們會(huì)一次性分享6個(gè)堪稱神仙的內(nèi)置函數(shù)。在很多計(jì)算機(jī)書籍中,它們也通常作為高階函數(shù)來介紹。而我自己在日常工作中,經(jīng)常使用它們來使代碼更快,更易于理解。
Lambda 函數(shù)
Lambda函數(shù)用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個(gè)表達(dá)式,函數(shù)體比def簡單很多。當(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ù)對象。
add2 = lambda x: x+2 add2(10)
輸出結(jié)果:
利用Lambda函數(shù),可以將代碼簡化很多,具體再舉個(gè)例子。
如上圖所示,結(jié)果列表newlist是使用lambda函數(shù)用一行代碼生成的。
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
輸出結(jié)果:
此外,我們還可以使用匿名函數(shù)lambda來配合map函數(shù),這樣可以更加精簡。
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倍。
Reduce函數(shù)
當(dāng)需要對一個(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,其代碼執(zhí)行過程如下方動(dòng)圖所示。
▲代碼執(zhí)行過程動(dòng)圖
結(jié)合上圖我們會(huì)看到,reduce將一個(gè)相加函數(shù)add()作用在一個(gè)列表[1,2,3,4,5]上,映射函數(shù)接收了兩個(gè)參數(shù),reduce()把結(jié)果繼續(xù)和列表的下一個(gè)元素做累加計(jì)算。
此外,我們同樣可以使用匿名函數(shù)lambda來配合reduce函數(shù),這樣可以更加精簡。
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)入.
enumerate 函數(shù)
enumerate()函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。它的語法如下所示:
enumerate(iterable, start=0)
它的兩個(gè)參數(shù),一個(gè)是序列、迭代器或其他支持迭代對象;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開始,也可以自定義計(jì)數(shù)器的起始編號。
colors = ['red', 'yellow', 'green', 'black'] result = enumerate(colors)
如果我們有一個(gè)存放colors的顏色列表,運(yùn)行后就會(huì)得到一個(gè)enumerate(枚舉) 對象。它可以直接在for循環(huán)中使用,也可以轉(zhuǎn)換為列表,具體用法如下所示。
for count, element in result: print(f"迭代編號:{count},對應(yīng)元素:{element}")
Zip 函數(shù)
zip()函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應(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ù)不一致,則返回列表長度與最短的對象相同。
prices =[100,50,120] for item in zip(colors,fruits,prices): print(item)
Filter 函數(shù)
filter()函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表,其語法如下所示[4]。
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é)果:
今天分享的這6個(gè)內(nèi)置函數(shù),在使用 Python 進(jìn)行數(shù)據(jù)分析或者其他復(fù)雜的自動(dòng)化任務(wù)時(shí)非常方便。
到此這篇關(guān)于Python中號稱神仙的六個(gè)內(nèi)置函數(shù)的文章就介紹到這了,更多相關(guān)python內(nèi)置函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)大戰(zhàn)外星人小游戲?qū)嵗a
這篇文章主要介紹了python實(shí)現(xiàn)大戰(zhàn)外星人小游戲,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05分享python機(jī)器學(xué)習(xí)中應(yīng)用所產(chǎn)生的聚類數(shù)據(jù)集方法
本文根據(jù) 機(jī)器學(xué)習(xí)中常用的聚類數(shù)據(jù)集生成方法 中的內(nèi)容進(jìn)行編輯實(shí)驗(yàn)和整理而得,有需要的朋友可以參考想,希望可以對大家在聚類數(shù)據(jù)方面有所幫助2021-08-08詳解Python中用于計(jì)算指數(shù)的exp()方法
這篇文章主要介紹了詳解Python中用于計(jì)算指數(shù)的exp()方法,是Python入門中必會(huì)的基本方法,需要的朋友可以參考下2015-05-05python?include標(biāo)簽的使用方式及說明
這篇文章主要介紹了python?include標(biāo)簽的使用方式及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03matplotlib 縱坐標(biāo)軸顯示數(shù)據(jù)值的實(shí)例
今天小編就為大家分享一篇matplotlib 縱坐標(biāo)軸顯示數(shù)據(jù)值的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05