python 內建常用高階函式

2022-09-16 16:57:12 字數 2022 閱讀 7561

一、函式式程式設計

1、map()是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回

def

add(x):

return x+x

print map(add,[1,2,3])

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

1

defprod(x, y):

2return x*y34

print reduce(prod, [2, 4, 5, 7, 12])

reduce()還可以接收第3個可選引數,作為計算的初始值。如果把初始值設為100,計算:

reduce(f, [1, 3, 5, 7, 9], 100)
結果將變為125,因為第一輪計算是:

計算初始值和第乙個元素:f(100, 1),結果為101。

3、filter()函式是 python 內建的另乙個有用的高階函式,filter()函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

import

math

defis_sqr(x):

return math.sqrt(x)==int(math.sqrt(x))

print filter(is_sqr, range(1, 101))

4、 sorted()也是乙個高階函式,它可以接收乙個比較函式來實現自定義排序,比較函式的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 y 的後面,返回 1。如果 x 和 y 相等,返回 0。

def

reversed_cmp(x, y):

if x >y:

return -1

if x return 1

return

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

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

def

cmp_ignore_case(s1, s2):

s1=s1.lower()

s2=s2.lower()

if s1>s2:

return 1

if s1return -1

return

0print sorted(['

bob', '

about

', '

zoo', '

credit

'], cmp_ignore_case)

5、python的函式不但可以返回int、str、list、dict等資料型別,還可以返回函式!

請注意區分返回函式和返回值:

def myabs():

return abs # 返回函式,返回函式可以把一些計算延遲。

def myabs2(x):

return abs(x) # 返回函式呼叫的結果,返回值是乙個數值

def calc_prod(lst):

def lazy_prod():

prod=1

for i in

lst:

prod=prod*i

return

prod

return

lazy_prod

f = calc_prod([1, 2, 3, 4

])print f()

Python之常用內建高階函式

map函式 用於接收乙個函式及多個迭代物件,會根據提供的函式對指定序列做對映,然後返回乙個新的map物件 例1 需要乙個引數 a map lambda x x x,1,2 3 print a 輸出結果 map object at 0x00fa73d0 此時a指向於map出的新物件,可以使用list ...

python 內建高階函式

1.map abs i for i in 1,3,4,5 1 對於序列每個元素求絕對值 import random from functools import reduce print list map abs,1,3,4,5 2 對於序列每個元素求階乘 5 import random deffac...

python 內建高階函式

1.map map 函式接收兩個引數,乙個是函式,乙個是序列 map將傳入的函式依次作用到序列的每個元素,並且把結果 作為新的序列返回 求絕對值 print map abs,1,3,4,5 輸出 map列印的不是乙個列表而是乙個物件,所以我們需要轉換為列表才能列印。print list map ab...