一個函數能夠接收另外一個函數做爲參數,這種函數就稱之爲高階函數
編寫高階函數,就是讓函數的參數可以接收別的函數
函數式編程就是指這種高度抽象的編程範式
高階函數的特色
變量能夠指向函數
函數自己也能夠賦值給變量,即:變量能夠指向函數編程
x = abs(-10) #abs(-10)是函數調用,而abs是函數自己 f = abs #變量f如今已經指向了abs函數自己 print(x) #輸出:10 print(f(-10)) #輸出:10, 直接調用f()函數和調用變量abs()徹底相同
函數名也是變量
函數名其實就是指向函數的變量
對於abs()這個函數,徹底能夠把函數名abs當作變量,它指向一個能夠計算絕對值的函數函數式編程
abs = 10 abs(-10) #輸出:報錯,把abs指向10後,就沒法經過abs(-10)調用該函數了!由於abs這個變量已經不指向求絕對值函數而是指向一個整數10 #要恢復abs函數,請重啓Python交互環境 #因爲abs函數其實是定義在import builtins模塊中的,因此要讓修改abs變量的指向在其它模塊也生效,要用import builtins; builtins.abs = 10
函數可做爲參數
既然變量能夠指向函數,函數的參數能接收變量,那麼一個函數就能夠接收另外一個函數做爲參數
一個最簡單的高階函數函數
def add(x, y, f): return f(x) + f(y) print(add(-5, 6, abs))
#輸出:11,具體執行過程爲:x = -5,y = 6,f = abs -> f(x) + f(y) -> abs(-5) + abs(6) -> 11