高階函式的概念是我在學習kotlin的時候才接觸到的,後來才發現很多語言都有該特性。簡單的定義為:把函式作為引數傳入另乙個函式中
例如:
def
add(x, y, f):
return f(x) + f(y)
print(add(-5, 6, abs))
其中,abs函式作為引數傳到add函式中,add函式就可以稱為高階函式。
簡單學習幾個內建的高階函式
map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
例如:
>>> def f(x):
...return x * x
...>>> l=[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> r = map(f, l)
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce把乙個函式作用在乙個序列[x1, x2, x3, …]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> from functools import reduce
>>> def add(x, y):
...return x + y
...>>> reduce(add, [1, 3, 5, 7, 9])
25
和map()類似,filter()也接收乙個函式和乙個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。
def
is_odd
(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結果: [1, 5, 9, 15]
python內建的sorted()函式就可以對list進行排序:
sorted([36, 5, -12, 9, -21])[-21, -12, 5, 9, 36]
作為高階函式時,可以按照函式來進行排序,例如按照絕對值排序
sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
要進行反向排序,不必改動key函式,可以傳入第三個引數reverse=true:
sorted([36, 5, -12, 9, -21], key=abs,reverse=true)[36, -21, -12, 9,5]
python學習筆記 高階函式map reduce
既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式。乙個最簡單的高階函式 def add x,y,f return f x f y 當我們呼叫add 5,6,abs 時,引數x,y和f分別接收 5,6和abs map deff x retu...
Python 學習筆記 5 1 高階函式
高階函式英文叫higher order function。什麼是高階函式?我們以實際 為例子,一步一步深入概念。以python內建的求絕對值的函式abs 為例,呼叫該函式用以下 abs 10 10但是,如果只寫abs呢?abs infunction abs 可見,abs 10 是函式呼叫,而abs是...
python高階學習筆記(一) 高階函式
filter filter 函式接收乙個 函式 f 和乙個list 這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如,要從乙個list 1,4,6,7,9,12,17 中刪除偶數,保...