lambda 表達(dá)式,又稱匿名函數(shù),常用來表示內(nèi)部僅包含 1 行表達(dá)式的函數(shù)。如果一個(gè)函數(shù)的函數(shù)體僅有 1 行表達(dá)式,則該函數(shù)就可以用 lambda 表達(dá)式來代替。
lambda 表達(dá)式的語法格式如下:
name = lambda [list] : 表達(dá)式
其中,定義 lambda 表達(dá)式,必須使用 lambda 關(guān)鍵字;[list] 作為可選參數(shù),等同于定義函數(shù)是指定的參數(shù)列表;value 為該表達(dá)式的名稱。
add = lambda x,y:x+y
print(add(3,4))
7
if 搭配 lambda 使用的效果如下:
add = lambda x,y:x+y if x>3 else 0
print(add(1,4))
print(add(4,4))
0
8
f = lambda x: ['small', 'big'][x>100]
print(f(101))
print(f(99))
big
small
部分Python內(nèi)置函數(shù)接收函數(shù)作為參數(shù)。典型的此類內(nèi)置函數(shù)有這些。
- filter函數(shù)。此時(shí)lambda函數(shù)用于指定過濾列表元素的條件。
a=filter(lambda x: x % 3 == 0, [1, 2, 3])
print(list(a))
[3]
- sorted函數(shù)。此時(shí)lambda函數(shù)用于指定對(duì)列表中所有元素進(jìn)行排序的準(zhǔn)則。
a=sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
print(list(a))
[5, 4, 6, 3, 7, 2, 8, 1, 9]
將列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素與5距離從小到大進(jìn)行排序,其結(jié)果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
- map函數(shù)。此時(shí)lambda函數(shù)用于指定對(duì)列表中每一個(gè)元素的共同操作。
a=map(lambda x: x+1, [1, 2,3])
print(list(a))
[2, 3, 4]
#效果類似于如下的for循環(huán)
foo = [1,2,3,4,5]
print( [x * 2 + 10 for x in foo])
print( [x * 2 + 10 if x>4 else 0 for x in foo])
[12, 14, 16, 18, 20]
[0, 0, 0, 0, 20]
- reduce函數(shù)。此時(shí)lambda函數(shù)用于指定列表中兩兩相鄰元素的結(jié)合條件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])將列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素從左往右兩兩以逗號(hào)分隔的字符的形式依次結(jié)合起來,其結(jié)果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。
from functools import reduce
a= reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(a))
print(a,type(a))
['1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ',', ' ', '5', ',', ' ', '6', ',', ' ', '7', ',', ' ', '8', ',', ' ', '9']
1, 2, 3, 4, 5, 6, 7, 8, 9 <class 'str'>
對(duì)比:
def add(x, y):
return x + y
def mulit(x, y):
return x * y
print(reduce(add, [1, 2, 3, 4, 5])) #輸出:15
print(reduce(add, [1, 2, 3, 4, 5], 10)) #輸出:25
print(reduce(mulit, [1, 2, 3, 4, 5])) #輸出:120
print(reduce(mulit, [1, 2, 3, 4, 5], 10)) #輸出:1200
print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5]))#輸出:15
print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5], 10))#輸出:25
print(reduce(lambda x,y:x*y,[1, 2, 3, 4, 5], 10))#輸出:1200
15
25
120
1200
15
25
1200