在Python里有五大高階函數,他們分別是lambda()匿名函數,filter()篩選函數,map()函數,reduce()函數,zip()函數。下面就讓我們來詳細的了解一下這五種函數的具體用法吧。
1.lambda()匿名函數
匿名函數lambda:是指一類無需定義標識符(函數名)的函數或子程序。
lambda 函數可以接收任意多個參數 (包括可選參數) 並且返回單個表達式的值。
要點:
1,lambda 函數不能包含命令,
2,包含的表達式不能超過一個。
說明:一定非要使用lambda函數;任何能夠使用它們的地方,都可以定義一個單獨的普通函數來進行替換。
我將它們用在需要封裝特殊的、非重用代碼上,避免令我的代碼充斥着大量單行函數。
lambda匿名函數的格式:冒號前是參數,可以有多個,用逗號隔開,冒號右邊的為表達式。
其實lambda返回值是一個函數的地址,也就是函數對象。
2.filter函數()
filter() 函數是一個對於可迭代對象的過濾器,過濾掉不符合條件的元素,
返回的是一個迭代器,如果要轉換為列表,可以使用 list() 來轉換。
該函數接收兩個參數,第一個為函數的引用或者None,第二個為可迭代對象,
可迭代對象中的每個元素作為參數傳遞給函數進行判,然后返回 True 或 False,最后將返回 True 的元素放到迭代器中
下面看下fiter()的用法:
''' filter() 函數是一個對於可迭代對象的過濾器,過濾掉不符合條件的元素, 返回的是一個迭代器,如果要轉換為列表,可以使用 list() 來轉換。 該函數接收兩個參數,第一個為函數的引用或者None,第二個為可迭代對象, 可迭代對象中的每個元素作為參數傳遞給函數進行判,然后返回 True 或 False,最后將返回 True 的元素放到迭代器中 下面看下fiter()的用法: ''' my_list=[1,2,'',3,4,'6',' '] new_list=list(filter(None,my_list)) print(new_list) #None 函數 過濾掉'' 而不是過濾掉空字符串 def is_oushu(x): return x%2==0 new_list=list(filter(is_oushu,list(range(1,11)))) print(new_list) #過濾掉不是偶數的數 a=[1,2,3,4,5,6,2,2,2,] print(list(filter(lambda x:x!=2,a))) #篩選出列表里所有的不是 2 的元素
3.map函數詳解
map()函數
map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,
並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。
例如,對於list [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果希望把list的每個元素都作平方,就可以用map()函數:
因此,我們只需要傳入函數f(x)=x*x,就可以利用map()函數完成這個計算:
4.reduce函數詳解
在python3中如果使用reduce需要先導入
from functools import reduce
reduce函數,reduce函數會對參數序列中元素進行累積。
reduce函數的定義:
reduce(function, sequence [, initial] ) -> value
function參數是一個有兩個參數的函數,reduce依次從sequence中取一個元素,
和上一次調用function的結果做參數再次調用function。
第一次調用function時,如果提供initial參數,
會以sequence中的第一個元素和initial作為參數調用function,
否則會以序列sequence中的前兩個元素做參數調用function。
5.zip函數詳解
#zip函數接受任意多個可迭代對象作為參數,將對象中對應的元素打包成一個tuple,然后返回一個可迭代的zip對象.
#這個可迭代對象可以使用循環的方式列出其元素
#若多個可迭代對象的長度不一致,則所返回的列表與長度最短的可迭代對象相同.
以上就是五大高階函數的具體用法。。。希望大家可以學到一些東西。。。





