filter():
filter()函式接收乙個
函式 f
和乙個list
,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,
filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
例如,要從乙個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫乙個判斷奇數的函式:
def is_odd(x):然後,利用filter()過濾掉偶數:return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])結果:[1, 7, 9, 17]
sorted():
python內建的 sorted()函式可對list進行排序:
>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]
但 sorted()也是乙個高階函式,它可以接收乙個比較函式來實現自定義排序,比較函式的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 y 的後面,返回 1。如果 x 和 y 相等,返回 0。
因此,如果我們要實現倒序排序,只需要編寫乙個reversed_cmp函式:
def reversed_cmp(x, y):這樣,呼叫 sorted() 並傳入 reversed_cmp 就可以實現倒序排序:if x > y:
return -1
if x < y:
return 1
return 0
>>> sorted([36, 5, 12, 9, 21], reversed_cmp)sorted()也可以對字串進行排序,字串預設按照ascii大小來比較:[36, 21, 12, 9, 5]
>>> sorted(['bob', 'about', 'zoo', 'credit'])'zoo'排在'about'之前是因為'z'的ascii碼比'a'小。['credit', 'zoo', 'about', 'bob']
reduce()
:
reduce()函式也是python內建的乙個高階函式。reduce()函式接收的引數和 map()類似,乙個函式 f,乙個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式f,並返回最終結果值。
例如,編寫乙個f函式,接收x和y,返回x和y的和:
def f(x, y):呼叫 reduce(f, [1, 3, 5, 7, 9])時,reduce函式將做如下計算:return x + y
先計算頭兩個元素:f(1, 3),結果為4;上述計算實際上是對 list 的所有元素求和。雖然python內建了求和函式sum(),但是,利用reduce()求和也很簡單。再把結果和第3個元素計算:f(4, 5),結果為9;
再把結果和第4個元素計算:f(9, 7),結果為16;
再把結果和第5個元素計算:f(16, 9),結果為25;
由於沒有更多的元素了,計算結束,返回結果25。
reduce()還可以接收第3個可選引數,作為計算的初始值。如果把初始值設為100,計算:
reduce(f, [1, 3, 5, 7, 9], 100)結果將變為125,因為第一輪計算是:
計算初始值和第乙個元素:f(100, 1),結果為101。
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()函式完成這個計算:
def f(x):輸出結果:return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 10, 25, 36, 49, 64, 81]注意:map()函式不改變原有的 list,而是返回乙個新的 list。
利用map()函式,可以把乙個 list 轉換為另乙個 list,只需要傳入轉換函式。
由於list包含的元素可以是任何型別,因此,map() 不僅僅可以處理只包含數值的 list,事實上它可以處理包含任意型別的 list,只要傳入的函式f可以處理這種資料型別。
python高階一 高階函式
1 函式式程式設計 python特點 不是純函式式程式設計 允許變數存在 支援高階函式 可以傳入函式作為變數 支援閉包 可以返回函式 有限度的支援匿名函式 高階函式 變數可以指向函式 函式的引數可以接收變數 乙個函式可以接收另乙個函式作為引數 def add x,y,f return f x f y...
scala學習筆記(十一) 高階函式
scala 作為函式式語言,函式自然是頭等公民 乙個接收函式作為引數的函式稱為高階函式 比如定義如下 defvalueatonequarter f double double f 0.25 這個函式接收乙個引數為 double 返回值為 double 的函式作為引數。高階函式還可以是返回乙個函式作為...
Python函式式程式設計(一) 高階函式
首先有乙個高階函式的知識。乙個函式可以接收另乙個函式作為引數,這種函式就稱之為高階函式。def add x,y,f return f x f y 當我們呼叫add 5,6,abs 時,引數x,y和f分別接收 5 6和abs,根據函式定義,我們可以推導計算過程為 等價於 x 5 y 6 f abs f...