Python常用高階函式

2021-09-13 02:18:28 字數 3022 閱讀 5247

高階函式是在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...