《Python3 程序開發指南》
Lambda函數,是一個匿名函數,創建語法:
lambda parameters:express
parameters:可選,如果提供,通常是逗號分隔的變量表達式形式,即位置參數。
expression:不能包含分支或循環(但允許條件表達式),也不能包含return(或yield)函數。如果為元組,則應用圓括號將其包含起來。
調用lambda函數,返回的結果是對表達式計算產生的結果。
根據參數是否為1 決定s為yes還是no >>> s = lambda x:"yes" if x==1 else "no" >>> s(0) 'no' >>> s(1) 'yes'
上面例子中,將if...else語句縮減為單一的條件表達式,語法為:
expression1 if A else expression2
如果A為True,條件表達式的結果為expression1,否則為expression2
以下舉例說明lambda函數的使用
使用sorted()方法和list.sort()方法進行排序 elements=[(2,12,"A"),(1,11,"N"),(1,3,"L"),(2,4,"B")] >>> sorted(elements) [(1, 3, 'L'), (1, 11, 'N'), (2, 4, 'B'), (2, 12, 'A')] 根據elements每個元組后兩項進行排序,e表示列表中每個三元組元素 在表達式是元組,且lambda為一個函數的參數時,lambda表達式的圓括號是必需的 >>> elements.sort(key=lambda e:(e[1],e[2])) >>> elements [(1, 3, 'L'), (2, 4, 'B'), (1, 11, 'N'), (2, 12, 'A')] 分片方式得到同樣的效果 >>> elements.sort(key=lambda e:e[1:3]) >>> elements [(1, 3, 'L'), (2, 4, 'B'), (1, 11, 'N'), (2, 12, 'A')] >>> elements.sort(key=lambda e:(e[2].lower(),e[1])) 以下兩種方法等價,都可以通過調用area(5,3),結果相同 >>> area=lambda b,h:0.5*b*h >>> def area(b,h): return 0.5*b*h 默認字典使用,存取不不在的鍵時,創建一個新項,鍵為這個不存在的鍵,值為lambda函數的值 >>> import collections >>> one_dict = collections.defaultdict(lambda:-1) >>> two_dict = collections.defaultdict(lambda:(0,0)) >>> three_dict = collections.defaultdict(lambda:"No message avaliable")
斷言???