高階函數就是把函數名(函數名本身也是變量)作為參數傳入另外的函數中計算,傳入的函數,可以是系統函數,也可以是自定義函數,如下:
def AddAbs(x,y,f):
return f(x)+f(y)
z = AddAbs(-10,10,abs)
print(z)
def TestF(t):
return t * t
z = AddAbs(-10,10,TestF)
print(z)
運作結果:
============================= RESTART: E:/abs.py =============================
20
200
兩個高階函數:map和reduce
import functools
# from functools import reduce
list1 = [1,2,3,4,5,6]
def SquL(x):
return x * x
def AddL(x,y):
return x + y
print(list1)
new_list1 = map(SquL,list1)
print(new_list1)
print(list(new_list1))
new_str1 = functools.reduce(AddL,list1)
print(new_str1)
運作結果:
============================= RESTART: E:/abs.py =============================
[1, 2, 3, 4, 5, 6]
<map object at 0x000001C0627BDFD0>
[1, 4, 9, 16, 25, 36]
21
Map其實就是建立一種映射關系。map有兩個輸入參數,一個是傳入的函數(映射關系建立的函數),另外一個是生成式(映射的結果),比如像清單。廖雪峰網站上說,map如果傳入一個清單,會傳回一個新的清單,但是我覺得說的有問題,可以看到上面的代碼,如果直接列印new_list1是列印不出來的,還需要加一個list()函數轉換一下。