1、高階函式的定義
把函式作為引數傳入(把一個函式作為另外一個函式的引數),或者將一個函式作為返回值的函式(閉包),這樣的函式稱為高階函式,滿足其一即可。
高階函式是函數語言程式設計的體現,函數語言程式設計就是指這種高度抽象的程式設計正規化。
2、體驗高階函式
在Python中,abs()
函式可以完成對數字求絕對值計算。
abs(-10) # 10
round()
函式可以完成對數字的四捨五入計算。
round(1.2) # 1
round(1.9) # 2
需求:任意兩個數字,按照指定要求整理數字後再進行求和計算。
- 方法1
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
- 方法2
# 高階函式:第三個引數f接收的是要給函式名,用來接收將來傳入的函式
# 如果我傳入絕對值方法,就按絕對值整理數值
# 如果我傳入四捨五入方法,就按四捨五入整理數值
def sum_num(a, b, f):
return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result) # 3
"""
我們也可以自定義函式,代替abs引數。
"""
注意:兩種方法對比之後,發現,方法2的程式碼會更加簡潔,函式靈活性更高。
函數語言程式設計大量使用函式,減少了程式碼的重複,因此程式比較短,開發速度較快。
3、內建高階函式
(1)map()函式
map(func, lst)
,將傳入的函式變數func
作用到lst
變數的每個元素中,並將結果組成新的列表(Python2)/迭代器(Python3)返回。
換句話說就是,map()
函式可以對可跌倒物件中的所有元素做指定的操作,然後將其新增到一個新的物件中返回。
需求:計算list1
序列中各個數字的2次方。
# 1. 準備列表資料
list1 = [1, 2, 3, 4, 5]
# 2. 準備2次方計算的函式
def func(x):
return x ** 2
# 3. 呼叫map
result = map(func, list1)
# 4. 驗收成果
print(result) # <map object at 0x0000013769653198>
print(list(result)) # [1, 4, 9, 16, 25]
(2)reduce()函式
reduce(func,lst)
,其中func
必須有兩個引數。每次func
計算的結果繼續和序列的下一個元素做累積計算。
注意:
reduce( )
傳入的引數func
必須接收2個引數。
需求:計算list1
序列中各個數字的累加和。
# 匯入模組
import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
return a + b
# 呼叫reduce,作用:功能函式計算的結果和序列的下一個資料做累計計算
result = functools.reduce(func, list1)
print(result) # 15
(3)filter()函式
filter(func, lst)
函式用於過濾序列, 過濾掉不符合條件的元素, 返回一個filter
物件。如果要轉換為列表, 可以使用list( )
來轉換。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 定義功能函式:過濾序列中的偶數
def func(x):
return x % 2 == 0
# 呼叫filter
result = filter(func, list1)
print(result) # <filter object at 0x0000017AF9DC3198>
print(list(result)) # [2, 4, 6, 8, 10]
Python支援函數語言程式設計,但Python不能說是一個函數語言程式設計語言(用的不多知道就行)。