1. 程式人生 > >python 高階函式筆記map, filter, reduce

python 高階函式筆記map, filter, reduce

ay17:

1.高階函式:

特點:函式的形參位置必須接受一個函式物件

分類學習:

1).map(fn,lsd1,[lsd2...]):

引數一:fn  --> 函式物件
引數二:lsd1 --> 序列物件(字串、列表、range...)

功能:
將fn函式作用於lsd1中的每一個元素上,
將每次執行的結果存入到一個map物件中返回;
【注意】得到的這個map物件是一個迭代器物件

需求:lt = ['1','2','3','4','5'] --> [1,2,3,4,5]

map(int,lt):執行過程如下:
1).lt --> 取出第一個元素:'1'當做實際引數傳遞給int函式的形參位置 --> int('1')
    將轉換以後的結果:1保留到map物件的第一個元素位置
2).lt --> 取出第二個元素:'2'當做實際引數傳遞給int函式的形參位置 --> int('2')
    將轉換以後的結果:2保留到map物件的第二個元素位置    
以此類推...
直到map函式執行完了,整個map物件才真正成型了... 


2).reduce(fn,lsd):

引數一:fn --> 函式物件
引數二:lsd --> 序列物件

功能:
先將lsd中的第一和第二個元素去除傳入到fn中參與運算,
運算後得到結果,再和第三個元素傳入到fn中參與運算,
以此類推...

【注意】:
reduce函式屬於functools模組中的函式,所以需要顯示的先匯入functools模組再使用

from functools import reduce


3).filter(fn,lsd):

filter函式:過濾資料的,最終返回一個惰性序列物件(filter物件,迭代器物件)

解釋:
filter的意思:在計算機領域中我們都稱為過濾器

格式:
filter(fn,lsd):

引數和map、reduce一樣理解

功能:
將lsd中的每一個元素都給到fn函式
如果fn函式的返回值為True,那麼就保留這個元素到filter物件中
如果fn函式的返回值為False,那麼就捨棄這個元素,不會保留到filter物件中
最終filter函式執行完畢了,返回給程式一個filter物件(迭代器物件)

補充:

sorted()函式的使用:

我們將sorted和sort進行一番比較:

相同點:
它們都是來實現排序的操作(功能層面)

不同點:
列表中的sort函式,它執行完畢後會直接影響原本這個list的內部結構(內部的資料發生改變了);
而內建函式sorted函式,它執行完畢後不會影響原本容器中的內部結構,而會返回一個新的列表給程式;

回顧排序:
選擇排序,氣泡排序它們的效能都很低下;
意味著開發不會用,但是面試喜歡面(一般開發不用的,面試都喜歡面)