2 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
lambda函數(shù)一般是在函數(shù)式編程中使用的。通常學(xué)習(xí)的C/C++/Java等等都是過(guò)程式編程,所以不常接觸lambda函數(shù)。
其實(shí)這貨在C++中已經(jīng)有所運(yùn)用了,如果對(duì)stl的迭代器比較熟悉的話(huà),就會(huì)知道里頭的foreach等函數(shù),需要給一個(gè)函數(shù),這對(duì)于C/C++這種古老的語(yǔ)言來(lái)說(shuō)比較痛苦,一般是在主函數(shù)外再寫(xiě)一個(gè)函數(shù),然后傳入函數(shù)指針,看起來(lái)非常不直觀。boosts用一些特殊的語(yǔ)法技巧實(shí)現(xiàn)了C++的lambda。
舉個(gè)栗子,對(duì)于這樣一個(gè)list L,求L中大于3的元素集合
L = [1, 2, 3, 4, 5]
對(duì)于過(guò)程式編程,通常會(huì)這么寫(xiě)
L3 = []for i in L: if i > 3: L3.append(i)
而對(duì)于函數(shù)式變成,只需要給filter函數(shù)一個(gè)判斷函數(shù)就行了
def greater_than_3(x): return x > 3L3 = filter(greater_than_3, L)
由于這個(gè)判斷函數(shù)非常簡(jiǎn)單,用def寫(xiě)起來(lái)太累贅了,所以用lambda來(lái)實(shí)現(xiàn)就非常簡(jiǎn)潔、易懂
L3 = filter(lambda x: x > 3, L)
這是個(gè)很簡(jiǎn)單的例子,可以看出lambda的好處。lambda函數(shù)更常用在map和reduce兩個(gè)函數(shù)中。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
基本上lambda適用于一些臨時(shí)性的,小巧的函數(shù)。比如作為一些參數(shù)傳遞給其他函數(shù)(類(lèi)似callback)
比如itertools模塊的ifilter函數(shù)
def ifilter(predicate, iterable): # ifilter(lambda x: x%2, range(10)) --> 1 3 5 7 9 if predicate is None: predicate = bool for x in iterable: if predicate(x): yield x
這里的predicate就可以傳遞一個(gè)lambda函數(shù)進(jìn)去,如果專(zhuān)門(mén)為此用一個(gè)def來(lái)定義函數(shù),顯得代碼不夠簡(jiǎn)介小巧,而lambda正合此意
添加回答
舉報(bào)