高階函式是在python中乙個非常有用的功能函式,所謂高階函式就是乙個函式可以用來接收另乙個函式作為引數,這樣的函式叫做高階函式。
為了便於理解,我們從實際例子來看看函式當做引數被傳遞到另個函式是什麼樣的。我們把abs()函式賦值給了f變數,接下來你就可以像使用abs()函式本身那樣使用f變數了,區別只是換了個名字而已。
# 將求絕對值的abs函式賦值給f變數
f =abs
# f變數等同於abs函式的功能和性質,區別只是換了個別名f(-
123)
# 輸出內容:
# 123
我們來檢視下這個f變數的型別,顯示為內建函式,因為它的真身就是內建abs()函式。
type
(f)# 輸出內容:
# builtin_function_or_method
def
add_number
(a, b, func_abs)
:# 在本例中,等同於執行的是 return abs(a) + abs(b)
return func_abs(a)
+ func_abs(b)
result = add_number(-10
,-20,
abs)
print
(result)
# 輸出內容:
# 30
如上,我們定義了乙個add_number函式,然後定義了3個函式引數變數分別為a,b,func_abs。通過函式內部語句我們可以發現func_abs其實是另乙個函式體內的函式,所以func_abs變數由於被呼叫的時候傳值為abs函式,它的實際真身就是abs函式了。
好了,徹底明白高階函式了,來看看python中常用的幾個高階函式。
map()
map()是 python 內建的高階函式,它接收乙個函式function 和乙個 list,並通過把函式 function 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。
這個例子中,假設使用者輸入的英文名字不規範,沒有按照首字母大寫,後續字母小寫的規則,可以利用map()函式把乙個list(包含若干不規範的英文名字)變成乙個包含規範英文名字的list。
def
format_name
(s):
return s.capitalize(
)result =
map(format_name,
['adam'
,'lisa'
,'bart'])
print
(list
(result)
)# 輸出內容:
# ['adam', 'lisa', 'bart']
如上要注意的一點是,由於結果result是乙個iterator,iterator是惰性可迭代序列,因此通過list()函式讓它把整個序列都計算出來並返回乙個list。
filter()
filter()接收乙個函式function 和乙個list,這個function 的作用是對list的每個元素進行判斷,返回true或false,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
下面的示例中,我們做的是把列表中包含字元e的元素取出來。
def
is_contain_s
(s):
if'e'
in s:
return
true
else
:return
false
result =
filter
(is_contain_s,
['stest'
,'abc'
,'str'
,' '
,'end'])
print
(list
(result)
)# 輸出內容:
# ['stest', 'end']
reduce()
reduce()函式也接收乙個函式function, 和乙個list。但reduce()傳入的函式必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式function, 並返回最終結果值。
在python 3裡,reduce()函式已經被從全域性名字空間裡移除了,它現在被放置在fucntools模組裡, 要使用的話要 先引入from functools import reduce
from functools import
reduce
deff
(x, y)
:return x + y
result =
reduce
(f,[1,
3,5,
7,9]
)print
(result)
# 輸出內容:
# 25
reduce()函式使用起來比較特殊,為了更好的理解上面這個例子,來詳細拆解下,當呼叫reduce(f,[1,3,5,7,9])時,reduce函式將做如下計算:
由於f這個函式的功能是計算兩個元素的值,所以先計算頭兩個元素:f(1,3),結果為4;
再把結果和第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。
python常用高階函式簡介
coding utf 8 python 常用高階函式 deffac n return n zw return 1if n 2else n fac n 1 print fac.doc fa fac a list map fa,range 5 map 函式把每個元素都放到fa這個函式裡面執行,並且是乙個...
python 內建常用高階函式
一 函式式程式設計 1 map 是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回 def add x return x x print map add,1,2,3 2 reduce 函式也是p...
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...