Python 內建高階函式總結

2021-10-01 08:49:15 字數 3432 閱讀 6462

接收兩個引數,乙個是函式 乙個是序列

map()將傳入的函式依次作用到序列的每個元素,並且把結果作為新的序列返回

import random

# 對乙個序列[-1,3,-4,-5]的每乙個元素求絕對值

print

(list

(map

(abs,[

-1,3

,-4,

-5])

))# 對每個元素求階乘

deff

(x):

"""對x求階乘"""

res =

1for i in

range(1

,x+1):

res = res * i

return res

li =

[random.randint(2,

7)for i in

range(10

)]print(li)

print

(list

(map

(f,li)))

結果:[1,

3,4,

5][3

,5,7

,4,5

,3,4

,7,5

,4][

6,120,

5040,24

,120,6

,24,5040

,120,24

]

接收兩個引數,乙個是函式 乙個是序列

把乙個函式作用在乙個序列上,這個函式必須接收序列兩個引數

reduce把結果繼續和序列的下乙個元素做累積計算

reduce(f,[x1,x2,x3,x4]) =f(f(f(x1,x2),x3),x4)

另:python2中:reduce是內建函式;python3中式模組functools中的函式

from functools import

reduce

#計算1-10的累計乘積

defmulti

(x,y)

:return x * y

print

(reduce

(multi,

range(1

,10))

)#計算1-100的累計加和

defadd

(x,y)

:return x+y

print

(reduce

(add,

range(1

,101))

)顯示結果:

3628800

5050

filter()是個過濾函式和map()類似的,也接收乙個函式和乙個序列

但是和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true或者false決定保留還是丟棄該元素

#10以內的偶數

defisodd

(num)

:if num %2==

0:return

true

else

:return

false

print

(list

(filter

(isodd,

range(11

))))

顯示結果:[0

,2,4

,6,8

,10]

sorted()對輸入的序列進行排序

不改變原來的列表內容,生成乙個新的列表

list=[

6,7,

8,9,

1,2,

34]list2 =

sorted

(list

)print

(list

)#[6, 7, 8, 9, 1, 2, 34]

print

(list2)

#[1, 2, 6, 7, 8, 9, 34]

list2 =[6

,8,-

8,-4

,2,3

,4,7

,8]list2.sort(

)print

(list2)

#[-8, -4, 2, 3, 4, 6, 7, 8, 8]

list3 =

sorted

(list2,key=

abs)

#abs絕對值

print

(list3)

#[2, 3, -4, 4, 6, 7, -8, 8, 8]

s =[

'da'

,'ffsf'

,'fsf'

,'das'

]print

(s)#['da', 'ffsf', 'fsf', 'das']

print

(sorted

(s))

#['fsf', 'ffsf', 'da', 'das']

print

(sorted

(s,key=

str.lower)

)#['da', 'das', 'ffsf', 'fsf']

print

(sorted

(s,key=

str.upper)

)#['da', 'das', 'ffsf', 'fsf']

匿名函式的關鍵字為 lambda;以冒號:分割**,前面是形參冒號後面是返回值

lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

lambda 函式擁有自己的命名空間,且不能訪問自己引數列表之外或全域性命名空間裡的引數。

from functools import

reduce

defadd

(x,y)

:return x+y

print

(reduce

(add,

range(10

)))#45

print

(reduce

(lambda x,y:x+y,

range(10

)))#45

defmypow

(x):

return x **

2print

(list

(map

(lambda x:x**2,

range(5

))))

#[0, 1, 4, 9, 16]

defisood

(num)

:return num %2==

0print

(list

(filter

(lambda x:x%2==

0,range(10

))))

#[0, 2, 4, 6, 8]

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

Python 內建高階函式

map是python 內建的高階函式,其可以傳入倆個引數,第乙個引數是函式,第二個引數是乙個iterable例如list。def aa a return a a r map aa,1,2,3,4 map的返回值是乙個iterator需要使用list 或者for 輸出所有元素。print a for ...