python高階學習筆記(一) 高階函式

2021-08-14 16:20:01 字數 2628 閱讀 9078

filter():

filter()函式接收乙個

函式 f 

和乙個list

,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,

filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

例如,要從乙個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫乙個判斷奇數的函式:

def is_odd(x):

return x % 2 == 1

然後,利用filter()過濾掉偶數:

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):

if x > y:

return -1

if x < y:

return 1

return 0

這樣,呼叫 sorted() 並傳入 reversed_cmp 就可以實現倒序排序:

>>> sorted([36, 5, 12, 9, 21], reversed_cmp)

[36, 21, 12, 9, 5]

sorted()也可以對字串進行排序,字串預設按照ascii大小來比較:

>>> sorted(['bob', 'about', 'zoo', 'credit'])

['credit', 'zoo', 'about', 'bob']

'zoo'排在'about'之前是因為'z'的ascii碼比'a'小。

reduce()

:

reduce()函式也是python內建的乙個高階函式。reduce()函式接收的引數和 map()類似,乙個函式 f,乙個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式f,並返回最終結果值。

例如,編寫乙個f函式,接收x和y,返回x和y的和:

def f(x, y):

return x + y

呼叫 reduce(f, [1, 3, 5, 7, 9])時,reduce函式將做如下計算:

先計算頭兩個元素:f(1, 3),結果為4;

再把結果和第3個元素計算:f(4, 5),結果為9;

再把結果和第4個元素計算:f(9, 7),結果為16;

再把結果和第5個元素計算:f(16, 9),結果為25;

由於沒有更多的元素了,計算結束,返回結果25。

上述計算實際上是對 list 的所有元素求和。雖然python內建了求和函式sum(),但是,利用reduce()求和也很簡單。

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...