函數式編程
- 特點:
- 不是純函數的編程,允許有變量
- 支持高階函數:函數可作爲變量傳入
- 支持閉包:可以返回函數
高階函數
- 內置函數:
- map(function f, list l):將f作用在l的每個元素上,並返回一個新的list
- reduce(function f, list l):對l中每個元素反覆使用f,最後返回一個結果
- filter(function f, list l):f是對l中每個元素進行判斷,去掉不符合的元素,剩餘元素返回一個新的list
- sorted(function f, list l):f中定義排序的規則,對l中元素進行按照f的規則排序
閉包:內層函數引用了外層函數的變量(參數也算變量),然後返回內層函數的情況,稱爲閉包(Closure)。
- 特點:內層函數使用外層的局部變量,要保證局部變量不變
匿名函數
- 關鍵字lambda 表示匿名函數,冒號前面的 x 表示函數參數。
- 匿名函數限制,就是只能有一個表達式,不寫return,返回值就是該表達式的結果。
裝飾函數(高階函數):使用 decorator 用Python提供的 @ 語法,這樣可以避免手動編寫 f = decorate(f),使用decrator之後會改造函數的一些屬性,爲了防止函數的屬性修改,所以在用decrator時,利用@functools.wraps(f)將函數的屬性都複製過去,這句話放在最裏層的高階函數的上面。
偏函數
- functools.partial可以把一個參數多的函數變成一個參數少的新函數,少的參數需要在創建時指定默認值