亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

被Python的匿名函數lambda搞得一頭霧水,該怎么處理?

被Python的匿名函數lambda搞得一頭霧水,該怎么處理?

慕仙森 2023-04-14 22:13:00
一直都是用def來創建函數的,最近又看到很多lambda來申明函數的,不知道這二者的用途有什么區別。def創建的函數是可以多次調用的,而lambda卻不可以,那么,為什么有時候要使用lambda呢?他創建的函數而且很難讀懂耶。
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

lambda函數一般是在函數式編程中使用的。通常學習的C/C++/Java等等都是過程式編程,所以不常接觸lambda函數。

其實這貨在C++中已經有所運用了,如果對stl的迭代器比較熟悉的話,就會知道里頭的foreach等函數,需要給一個函數,這對于C/C++這種古老的語言來說比較痛苦,一般是在主函數外再寫一個函數,然后傳入函數指針,看起來非常不直觀。boosts用一些特殊的語法技巧實現了C++的lambda。

舉個栗子,對于這樣一個list L,求L中大于3的元素集合

L = [1, 2, 3, 4, 5]

對于過程式編程,通常會這么寫

L3 = []for i in L:    if i > 3:
        L3.append(i)

而對于函數式變成,只需要給filter函數一個判斷函數就行了

def greater_than_3(x):    return x > 3L3 = filter(greater_than_3, L)

由于這個判斷函數非常簡單,用def寫起來太累贅了,所以用lambda來實現就非常簡潔、易懂

L3 = filter(lambda x: x > 3, L)

這是個很簡單的例子,可以看出lambda的好處。lambda函數更常用在map和reduce兩個函數中。

查看完整回答
反對 回復 2023-04-18
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

基本上lambda適用于一些臨時性的,小巧的函數。比如作為一些參數傳遞給其他函數(類似callback)
比如itertools模塊的ifilter函數

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就可以傳遞一個lambda函數進去,如果專門為此用一個def來定義函數,顯得代碼不夠簡介小巧,而lambda正合此意


查看完整回答
反對 回復 2023-04-18
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號