高階函數

一個函數能夠接收另外一個函數做爲參數,這種函數就稱之爲高階函數
編寫高階函數,就是讓函數的參數可以接收別的函數
函數式編程就是指這種高度抽象的編程範式

高階函數的特色
  變量能夠指向函數
    函數自己也能夠賦值給變量,即:變量能夠指向函數編程

    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
相關文章
相關標籤/搜索