匿名函數lambda
lambda args:expression
f1 = lambda x,y : x+y
args:以逗號分隔的參數列表
expression:用到args中各參數的表達式
- lambda語句定義的代碼必須是合法的表達式,不能出現多條件語句(可使用if的三元表達式)和其他非表達式語句,如for和while等
- lamda的首要用途是指定短小的回調函數
- lambda將返回一個函數而不是將函數賦值給某變量名
- 注意:
lambda是一個表達式而非語句
lambda是一個單個表達式,而不是一個代碼塊 - def語句創建的函數將賦值給某變量名,而lambda表達式則直接返回函數
- lambda也支持使用默認參數
-
Python函數式編程
函數式編程:
- 也稱作泛函編程,是一種編程規範
- 它將電腦運算視爲數學上的函數計算,並且避免狀態以及可變數據
- 函數式編程語言最重要的基礎是lambda演算,而且lambda演算的函數可以接受函數當作輸入和輸出
Python支持有限的函數式編程功能:
過濾器 filter(func,seq)
- filter()爲已知的序列的每個元素調用給定的布爾函數
- 調用中,返回值爲非零值的元素將被添加至一個列表中
映射器 map(func,seq1[,seq2…])
- map()將函數調用“映射”到每個序列的對應元素上並返回一個含有所有返回值的列表
摺疊 reduce(func,seq[,init])
- 將二元函數作用域seq序列的元素,每次攜帶一對(先前的結果以及下一個序列元素),連續地將現有的結果和下一個值作用在獲得的隨後的結果上,最後減少我們的序列爲一個單一的返回值;如果初始值init給定,第一個比較會是init和第一個序列元素而不是序列的頭兩個元素