L11-Python中的高階函數的使用

Python中的函數是一個對象,既可以作爲輸入參數,也可以作爲返回結果。在這裏聊聊幾個常用的高階函數,來看看函數是如何被作爲輸入參數/返回結果來使用的。

1、map() 映射函數

語法:map(function,Iterator)
function指函數名稱,Iterator指一個可迭代對象如列表。

用途:遍歷Iterator中的每一個元素,執行函數function

# 直接使用lambda 臨時函數
items=[1, 3, 9, 10]
list(map(lambda x:x+1, items))
# 先定義函數,再傳入函數名
def plus1(x):
    x += 1
    return x
# 注:這裏是 plus1 而不是 plus1() 
list(map(plus1, items))

2、reduce() 規約函數

用途: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))

3、filter() 過濾函數

用途: 用來過濾序列

調用方式:
filter(函數名,對象名)把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素

返回值:
是一個Iterator,也就是一個惰性序列,所以要強迫filter()完成計算結果,需要用list()函數獲得所有結果並返回list

def is_odd(n):
    return n % 2 == 1

# 查看返回類型,是一個filter對象
type(filter(is_odd, [1, 3, 4, 9]))
# <class 'filter'>

# 用list()輸出
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

#%% 去掉序列中的空字符串
def not_empty(s):
    return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))

4、sorted() 排序函數

既可以使用默認的升序,也可以通過傳入函數來實現自定義排序

# 默認按升序
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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章