python 高階函數

#1.高階函數
#把函數作爲參數傳入,這樣的函數就叫做高階函數。
# 高階函數是函數式編程的體現,函數式編程就是指這種高度抽象的編程範式
# 作用 : 化簡代碼,增加代碼靈活性

def sum_num(a, b, f):
    return f(a) + f(b)
#第三個參數傳入abs()函數
print(sum_num(-1, 5, abs))    #輸出 6
#第三個參數傳入round()函數
print(sum_num(1.1, 2.9, round)) #輸出 4
# 2. 內置高階函數
# 2.1 map()
# map(function, iterable),將傳入的函數變量func作用到lst變量的每個元素中
# 並將結果組成新的列表(python2)/迭代器(python3)返回
# function -- 函數
# iterable -- 一個或多個序列

def square(x):
    return x ** 2
list2 = map(square, [1, 2, 3, 4])
print(list2)         #返回迭代器,輸出 <map object at 0x0000013BE63933D0>
print(list(list2))   #輸出 [1, 4, 9, 16]

list3 = map(lambda x : x ** 2, [1, 2, 3, 4])
print(list3)         #輸出 <map object at 0x0000013BE63B8F70>
print(list(list3))   #輸出 [1, 4, 9, 16]

#提供兩個列表,對相同位置的列表數據進行相加
list4 = map(lambda x, y : x + y, [1, 2, 3, 4], [5, 6, 7, 8])
print(list4)         #輸出 <map object at 0x0000013BE64334F0>
print(list(list4))   #輸出 [6, 8, 10, 12]

#2.2 reduce()函數
#reduce(func, lst), 其中func函數必須要有兩個參數
#每次 func 計算的結果繼續和序列的下一個元素做累積計算
import functools
l1 = functools.reduce(lambda x, y : x + y, [1, 2, 3, 4, 5, 6, 7, 8])
print(l1)  #輸出 36

#2.3 filter()函數
#filter(func, lst)函數用於過濾序列,過濾掉不符合條件的元素
# 返回一個filter對象,如果要轉換爲列表,可以用list()轉換
# 將序列中的奇數過濾出來
l2 = filter(lambda x : x % 2 == 1, range(1, 10))
print(l2)       #輸出 <filter object at 0x000001FD698146A0>
print(list(l2)) #輸出 [1, 3, 5, 7, 9]
# 將序列中平方根是整數的數過濾出來
import math
l3 = filter(lambda x : math.sqrt(x) % 1 == 0, range(1, 101))
print(l3)       #輸出 <filter object at 0x000001FD698146D0>
print(list(l3)) #輸出 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

發佈了59 篇原創文章 · 獲贊 15 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章