python中的函式是乙個物件,既可以作為輸入引數,也可以作為返回結果。在這裡聊聊幾個常用的高階函式,來看看函式是如何被作為輸入引數/返回結果來使用的。
語法:map(function,iterator)
function指函式名稱,iterator指乙個可迭代物件如列表。
用途:遍歷iterator中的每乙個元素,執行函式function
# 直接使用lambda 臨時函式
items=[1
,3,9
,10]list
(map
(lambda x:x+
1, items)
)# 先定義函式,再傳入函式名
defplus1
(x):
x +=
1return x
# 注:這裡是 plus1 而不是 plus1()
list
(map
(plus1, items)
)
用途:reduce() 函式會對引數序列中元素進行累積。
執行過程:
函式將乙個資料集合(鍊錶,元組等)中的所有資料進行下列操作:
用傳給 reduce 中的函式 function(有兩個引數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個資料用 function 函式運算,最後得到乙個結果
def
sumtotal
(x,y)
:return x + y
from functools import
reduce
# print
(reduce
(sumtotal,items)
)# 直接傳入lambda函式
print
(reduce
(lambda x,y:x+y,items)
)
用途: 用來過濾序列
呼叫方式:
filter(函式名,物件名)把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素
返回值:
是乙個iterator,也就是乙個惰性序列,所以要強迫filter()完成計算結果,需要用list()函式獲得所有結果並返回list
def
is_odd
(n):
return n %2==
1# 檢視返回型別,是乙個filter物件
type
(filter
(is_odd,[1
,3,4
,9])
)# # 用list()輸出
list
(filter
(is_odd,[1
,2,4
,5,6
,9,10
,15])
)#%% 去掉序列中的空字串
defnot_empty
(s):
return s and s.strip(
)list
(filter
(not_empty,
['a',''
,'b'
,none
,'c'
,' '])
)
既可以使用預設的公升序,也可以通過傳入函式來實現自定義排序
# 預設按公升序
print
(sorted([
36,5,
-12,9
,-21]
))# [-21, -12, 5, 9, 36]
# 傳入函式,按絕對值公升序
print
(sorted([
36,5,
-12,9
,-21]
, key=
abs)
)# [5, 9, -12, -21, 36]
# 忽略大小寫
print
(sorted([
'bob'
,'about'
,'zoo'
,'credit'
], key=
str.lower)
)#%% 反向排序
print
(sorted([
'bob'
,'about'
,'zoo'
,'credit'
], key=
str.lower, reverse=
true
))
python高階函式 11
在乙個函式內呼叫本身 def new num if num 1or num 2 return 1else return new num 1 new num 2 print new 10 格式 lambda para1,para2,paran expression using paras f lamb...
python中的高階函式
高階函式 能接收函式作為引數的函式。一 map f,list python內建的乙個高階函式,需要乙個函式和乙個list作為引數,傳進來的函式會一一作用於list中的每個元素,然後返回乙個新的list。二 reduce f,list python內建的乙個高階函式,同樣,需要乙個函式和list作為引...
Python 中的高階函式
python中的高階函式和其他語言一樣分別有以下幾個 map fn,list 對映 filter fn,list 過濾只返回滿足條件的元素sorted list,key 序列排序reduce fn,list 兩兩對折,返回乙個唯一數值 這幾位在語法結構和引數的先後順序上會同其他語言有所不同,但是在意...