精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python 之父為什么嫌棄 lambda 匿名函數(shù)?

開發(fā) 后端
Python 支持 lambda 匿名函數(shù),其擴展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" expression,也就是lambda 參數(shù)序列:表達式。

Python 支持 lambda 匿名函數(shù),其擴展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" expression,也就是lambda 參數(shù)序列:表達式。

[[342905]]

這是一種便捷的函數(shù)定義方式,若翻譯成我們熟知的函數(shù)形式,會是這個樣子:

  1. def <lambda>(parameter_list): 
  2.     return expression 

也就是說,Python 中的 lambda 函數(shù)是一種可接收多個參數(shù)的函數(shù),返回值是一個表達式。

它最大的好處是單行簡潔,不需要函數(shù)命名與換行縮進。

不得不說,匿名函數(shù)有時候是挺好用的,比如下文會介紹到的一些常見用法,它因此受到了不少人的推崇。

但是,匿名函數(shù)通常也會造成代碼難以閱讀,容易被人濫用,再加上 Python 只提供了對它的“殘疾的”支持,所以又有一些觀點不建議使用匿名函數(shù)。

事實上,Python 之父 Guido van Rossum 就屬于“不推薦使用派”,他甚至曾經(jīng)(2005年)想要移除 lambda,只不過最后妥協(xié)了。

出處:https://www.artima.com/weblogs/viewpost.jsp?thread=98196

lambda 這一個由其他開發(fā)者貢獻進來的特性(借鑒自 lisp 語言),存在了十多年,但是卻被這門語言的創(chuàng)造者(兼首席設計師)所嫌棄,最后竟然還奇跡般地幸存了下來,對于這個故事,大家是否覺得挺有戲劇性的?

接下來,本文就仔細聊一聊這個處境尷尬卻生命力頑強的 lambda 匿名函數(shù)吧!

1. lambda 怎么使用?

lambda 函數(shù)通常的用法是結合 map()、reduce()、filter()、sorted() 等函數(shù)一起使用,這些函數(shù)的共性是:都可以接收其它函數(shù)作為參數(shù)。

例如下面的幾個例子:

  1. my_list = [3, 1, 5, 4, 10] 
  2.  
  3. # 元素全加1,結果:[4, 2, 6, 5, 11] 
  4. list(map(lambda i:i+1, my_list))  
  5.  
  6. # 過濾小于10的元素,結果:[3, 1, 5, 4] 
  7. list(filter(lambda i:i<10, my_list))  
  8.  
  9. # 元素累加,結果:33 
  10. from functools import reduce 
  11. reduce(lambda i,j:i+j, my_list, 10) 
  12.  
  13. # 字典按值排序,結果:[('b', 1), ('a', 3), ('d', 4), ('c', 5)] 
  14. my_dict = {'a':3, 'b':1, 'c':5, 'd':4} 
  15. sorted(my_dict.items(), key=lambda item:item[1]) 

初學者也許會覺得代碼讀不懂,但是只要記住“Python中的函數(shù)是一等公民”,知道一個函數(shù)可以被作為另一個函數(shù)的參數(shù)或者返回值,就容易理解了。

比如對于 map() 函數(shù)的例子,你可以理解成這個形式:

  1. my_func = lambda i:i+1 
  2. list(map(my_func, my_list))  

甚至可以還原成普通的函數(shù):

  1. def add_one(i): 
  2.     return i+1 
  3.  
  4. list(map(add_one, my_list))  

map() 函數(shù)的第一個參數(shù)是一個函數(shù),第二個參數(shù)是一個可迭代對象。這第一個參數(shù)會迭代地調(diào)用第二個參數(shù)中的元素,調(diào)用的結果以迭代器的形式返回。

這個例子使用了 list(),是為了方便一次性取出迭代器中的元素,直觀地展示出來,在實際使用中,很可能會是基于迭代器的形式。

由這幾種用法,我們可以總結出 lambda 函數(shù)的使用規(guī)律:

  • 它出現(xiàn)在需要使用函數(shù)的地方
  • 它適合實現(xiàn)簡單的功能
  • 它是一次性的用途,不能在其它地方復用
  • 它一般不會被獨立使用,總是作為其它函數(shù)的一部分

2. lambda 有什么問題?

由上面的用法可以看出,使用 lambda 函數(shù)的代碼比較緊湊簡潔,所以有人稱它體現(xiàn)了“Pythonic”的優(yōu)雅思想。

但是,lambda 函數(shù)有沒有什么缺陷呢?

有!當前的 lambda 函數(shù)有一個最大的問題,即只支持單行表達式,無法實現(xiàn)豐富的功能,例如無法在函數(shù)創(chuàng)建時使用語句(statement),無法使用 if-else 的判斷條件,也無法使用 try-except 的異常捕獲機制,等等。

這極大地限制了它的能力,導致了它被人詬病為“殘疾的”。

從技術實現(xiàn)的角度上看, 這個問題可以通過語法層面的設計來解決。

在當年的郵件組討論中,有人提出過一些解決思路,比如這封郵件:

出處:https://mail.python.org/pipermail/python-dev/2006-February/060654.html

它提出了一個lambda args::suite 的想法,支持寫成這樣的形式:

  1. ss = sorted(seq, key=(lambda x:: 
  2.             try: return abs(x) 
  3.             except TypeError: return 0)) 

但是,Guido 很快就否決了這個思路。

他寫了一篇文章《Language Design Is Not Just Solving Puzzles》來回應:

出處:https://www.artima.com/weblogs/viewpost.jsp?thread=147358

其基本觀點是:不能光顧著解決一個問題/實現(xiàn)某種功能,就引入缺乏“Pythonicity”的語言設計。

那么,為什么 Guido 會認為這是一種不好的設計呢?

我試著概括一下,理由是:

  • 雙冒號“::”憑空在此引入,但是跟切片語法中的“::”完全不同,而且跟 C++/Perl 中的作用域操作符用法也不同
  • 即使不用雙冒號,用其它符號表示(比如單冒號),還是難以接受,因為都會在一個表達式中嵌入縮進代碼塊。這就跟使用花括號和 begin/end 關鍵字來作語句分組(statement grouping)一樣,都令人難以接受
  • 在 lambda 中實現(xiàn)其它功能并不重要,這還會讓解析器變得復雜(需區(qū)分是否有縮進、記錄縮進級別),顯得小題大做了

簡而言之,他認為簡潔友好的用戶體驗更為重要,如果簡潔的語法無法滿足需求,就應該寫成具名函數(shù)的形式,而非設計出復雜的匿名函數(shù)。

3. 為什么 Guido 想移除 lambda?

上文提到的多行 lambda 語句(multi-statement lambda)事件發(fā)生在 2006 年,我們看到了 Guido 不想給 lambda 引入復雜設計的原因。

但是,早在 2005 年,Guido 就曾經(jīng)想要從 Python 移除 lambda,他對它的“嫌棄”是一個“歷史悠久”的傳統(tǒng)……

在《The fate of reduce() in Python 3000》這篇短文中,Guido 提出要一次性移除 reduce()、map()、filter() 以及 lambda。

移除 lambda 的理由如下:

  • 對于不熟悉 Lisp 或 Scheme 的用戶,lambda 這名字容易造成混淆
  • 很多人誤以為匿名函數(shù)能做嵌套函數(shù)不能做的事,但其實并無區(qū)別;存在lambda,就會造成不必要的選擇,減少選擇,可以簡化思維
  • 移除 reduce()、map() 和 filter() 后,就沒必要寫簡短的局部函數(shù)了
  • 回顧一下我們在前文中總結出的 lambda 的 4 條使用規(guī)律,可以發(fā)現(xiàn)它跟幾個高階函數(shù)(可以接收其它函數(shù)作為參數(shù)的函數(shù))有較強的“寄生關系”,如果它們能移除了的話,lambda 確實就沒有什么獨立存留的意義了。

那么,為什么 Guido 覺得應該移除那幾個高階函數(shù)呢?

主要的理由有:

  • 可以替換成更加清晰的列表解析式或者生成器表達式,例如 filter(P,S) 可以寫成 [x for x in S if P(x)],map(F, S) 寫成 [F(x) for x in S]
  • 至于 reduce(),他說這是最討厭的,除了涉及 + 和 * 的少數(shù)用法,其它時候他總要拿出紙筆來畫圖解才能搞清楚。除了顯式地寫循環(huán),他還針對 reduce() 的幾種用法而提出了幾個替代用法,包括引入新的 any() 和 all() 函數(shù)

總體而言,Guido 的想法暗合了《The Zen of Python》中的這一條:There should be one-- and preferably only one --obvious way to do it。

但是回到現(xiàn)實,為了照顧某些人的習慣,以及對兼容性的考慮,Guido 最后保守地放棄了“清理異端”的計劃。

因此,lambda 得以從 Python 最高獨裁者的手上死里逃生。直到一年后,它試圖興風作浪(多行表達式),卻慘遭鎮(zhèn)壓。

我仿佛聽到了 Guido 的內(nèi)心 OS:當初我想刪除東西的時候,你們百般阻撓,現(xiàn)在你們想添加東西,哼,沒門!……

[[342906]]

哈哈,開了個玩笑。

Guido 的所有決定都體現(xiàn)了他的 Pythonic 設計美學、自恰的邏輯一致性以及對社區(qū)聲音的權衡。

對于 lambda,我認可他的觀點,而通過回溯語法發(fā)展的歷史,我覺得自己對于 Python 的理解變得更為豐富了。不知道你可有同感?

 

責任編輯:趙寧寧 來源: Python貓
相關推薦

2025-06-11 08:00:00

LambdaPython函數(shù)

2024-02-27 09:43:37

Pythonlambda函數(shù)

2023-05-09 07:16:06

2014-02-01 21:25:08

Python數(shù)組

2020-10-16 06:40:25

C++匿名函數(shù)

2021-10-08 06:42:59

程序員社會性缺陷

2023-05-31 13:32:08

Javalambda函數(shù)

2020-07-22 07:55:12

Python開發(fā)函數(shù)

2017-06-28 15:06:51

PythonLambda函數(shù)

2022-01-19 22:51:57

設計匿名用戶

2010-11-02 14:31:44

Google Maps

2013-01-20 14:54:34

PythonLambda

2022-07-07 09:03:36

Python返回函數(shù)匿名函數(shù)

2013-04-07 10:04:03

Java8Lambda

2020-08-16 11:29:12

Python函數(shù)開發(fā)

2021-07-19 09:58:22

Pythonprint函數(shù)

2022-09-13 09:31:59

Python內(nèi)置函數(shù)lambda

2023-11-01 16:55:27

Golang匿名函數(shù)

2020-01-22 16:53:54

編程語言PythonJava

2020-02-11 11:28:54

Python 開發(fā)編程語言
點贊
收藏

51CTO技術棧公眾號

国产午夜精品理论片a级大结局 | 成人国产精品一区| 欧美一区二区三区粗大| 欧美成人免费全部网站| 一区二区免费在线| 欧美一级爱爱| 一级片aaaa| 亚洲黑丝一区二区| 在线播放国产精品| 中国xxxx性xxxx产国| www.成人影院| 亚洲自拍偷拍麻豆| 亚州欧美一区三区三区在线| 精品久久久久中文慕人妻| 亚洲永久免费| 欧美成人在线影院| 日本xxxxxxxxx18| 亚洲日本视频在线| 欧美色图免费看| 黄页免费在线观看视频| 免费高清在线观看| 久久久不卡网国产精品二区| 99视频免费观看| 96亚洲精品久久久蜜桃| 国产日韩高清一区二区三区在线| zzijzzij亚洲日本成熟少妇| 一卡二卡三卡四卡| swag国产精品一区二区| 91精品国产手机| 色片在线免费观看| 九色porny丨入口在线| 一区二区三区中文字幕精品精品| 先锋影音网一区| 欧美精品少妇| 99久精品国产| 国产精品久久久久久久久久久久冷 | 精品理论电影| 日韩美女视频在线| 爱豆国产剧免费观看大全剧苏畅| 日韩精品专区| 午夜精品福利一区二区三区蜜桃| 男插女免费视频| 五月天婷婷在线视频| 久久精品一区蜜桃臀影院| 久久草.com| 三级视频在线播放| 91色.com| 久久婷婷人人澡人人喊人人爽| 午夜美女福利视频| 国产精品99久久久久久有的能看| 国产色婷婷国产综合在线理论片a| 久久久久久久亚洲| 日韩精品一级二级| 国产精品成人播放| 中文字幕 国产精品| 日本一不卡视频| 国产精品久久久久久久久影视| 日本一区二区三区免费视频| 巨大荫蒂视频欧美大片| 国产丝袜美腿一区二区三区| 欧美日韩国产一二| 国产中文字幕在线看| 久久精品视频在线免费观看| 日韩激情久久| 成人免费视频| 中文字幕中文字幕一区二区| 国产对白在线播放| 污污的网站在线免费观看| 一区二区理论电影在线观看| 成年人看的毛片| 男人av在线播放| 色视频成人在线观看免| 天天干天天干天天干天天干天天干| 精品国模一区二区三区| 欧美日韩国产天堂| 国产亚洲色婷婷久久| 中文字幕一区二区三区四区久久| 亚洲精品在线电影| 精品人妻互换一区二区三区| 精品国产一区二区三区| 日韩专区在线观看| 久久久夜色精品| 亚洲综合国产| 国产主播欧美精品| 国产77777| 国产亚洲精品超碰| 国产三级中文字幕| 乱馆动漫1~6集在线观看| 日本高清视频一区二区| 国产女同无遮挡互慰高潮91| 国产精品宾馆| 在线a欧美视频| 久久久久久久黄色| 久久久人人人| 91精品国产一区二区三区动漫| 少妇人妻偷人精品一区二区| 欧美激情在线看| 成人在线国产视频| 欧美亚洲综合视频| 亚洲成人av在线| 在线观看免费黄色网址| 黄色亚洲大片免费在线观看| 日韩av免费在线播放| 国产丝袜视频在线观看| 久久久久久久性| 久久久99精品视频| 日本.亚洲电影| 亚洲成年网站在线观看| 亚洲熟女毛茸茸| 亚欧美中日韩视频| 97免费高清电视剧观看| 北条麻妃在线| 精品久久久国产| 三级黄色片免费看| 亚洲精品播放| 久久久久久噜噜噜久久久精品| 亚洲午夜在线播放| 26uuuu精品一区二区| 4444亚洲人成无码网在线观看| 深夜成人影院| 日韩av在线高清| 青青草激情视频| 蜜臀av一区二区在线观看| 久久精品日韩精品| 国产探花视频在线观看| 欧美精品1区2区3区| 美女洗澡无遮挡| 亚洲经典视频在线观看| 69174成人网| 欧美性videos| 欧美性极品少妇| 黑鬼大战白妞高潮喷白浆| 日韩精品中文字幕一区二区| 色噜噜狠狠狠综合曰曰曰| 中文字幕黄色片| av电影在线观看不卡| 妞干网视频在线观看| 亚洲综合资源| 日韩在线国产精品| 国产九色91回来了| 久久精品视频在线免费观看| 色综合av综合无码综合网站| 欧美日韩看看2015永久免费 | 正在播放91九色| 日本另类视频| 在线观看日韩av| 成年人视频免费| 日本一区二区久久| 男女啪啪网站视频| 日本不卡高清| 91精品国产综合久久久久久久久| 18免费在线视频| 欧美日韩电影在线| 内射一区二区三区| 国产在线不卡一区| 成年丰满熟妇午夜免费视频| 美女国产精品久久久| 欧美激情精品久久久久久免费印度| www.天堂在线| 亚洲成人av一区二区| 成人手机在线免费视频| 噜噜噜91成人网| 亚洲v欧美v另类v综合v日韩v| 日韩制服一区| 久久精品久久精品亚洲人| 国产麻豆91视频| 亚洲一二三四在线| 国产在线观看无码免费视频| 久久亚洲美女| 国产91av视频在线观看| 国产亚洲高清一区| 高清欧美性猛交xxxx黑人猛交| 日本高清视频www| 一本一本大道香蕉久在线精品 | 水蜜桃久久夜色精品一区| 成人黄色片在线| 丰乳肥臀在线| 亚洲一区二区精品| 国产精品无码久久av| 亚洲影视在线播放| 国产精品无码久久久久一区二区| 日本免费在线视频不卡一不卡二| 视频一区二区视频| 任你躁在线精品免费| 国产精品极品美女粉嫩高清在线| 老司机福利在线视频| 亚洲第一av在线| 综合久久中文字幕| 夜夜嗨av一区二区三区四季av| 日韩av无码一区二区三区不卡| 久久亚洲国产精品一区二区| 国产精品99久久久久久大便| 久久aimee| 国产日韩精品在线| 国产免费拔擦拔擦8x在线播放 | 一区二区视频在线免费| 91精品短视频| 国产精品入口免费视| 国产蜜臀一区二区打屁股调教| 一本一道久久a久久精品逆3p | 精品女人视频| 国产日韩av在线播放| 不卡一本毛片| 久久国内精品一国内精品| 五月激情丁香婷婷| 91精品国产乱码久久蜜臀| 欧美男人亚洲天堂| 亚洲一区二区视频在线观看| 毛片aaaaaa| 99久久综合狠狠综合久久| 在线观看免费av网址| 亚洲尤物精选| 青青草国产免费| 91精品观看| 日韩在线第一区| 亚洲国产精品嫩草影院久久av| 91日韩久久| 亚洲精品成人一区| 国产成人亚洲综合| 爱福利在线视频| 欧美成人sm免费视频| av中文字幕在线| 亚洲欧洲在线观看| 亚洲aⅴ在线观看| 亚洲激情电影中文字幕| www.成人精品| 欧美一级二级三级乱码| 国产精品久久久久久在线| 在线免费精品视频| 狠狠人妻久久久久久| 精品国产福利在线| 91精品国产乱码在线观看| 亚洲一区二区三区在线看| 顶臀精品视频www| 亚洲特级片在线| 熟女少妇a性色生活片毛片| 国产精品午夜电影| 精品亚洲aⅴ无码一区二区三区| 久久人人超碰精品| 精品久久久久久中文字幕人妻最新| 成人久久18免费网站麻豆| 精品人妻一区二区乱码| 国产一区二区在线电影| 国产欧美精品一二三| 久久成人免费电影| 中文字幕精品一区二区三区在线| 免费高清成人在线| 一女二男3p波多野结衣| 免费观看久久久4p| 中文字幕 日韩 欧美| 紧缚奴在线一区二区三区| 毛片毛片毛片毛| 国产伦精品一区二区三区视频青涩| 又色又爽又黄视频| 国产91精品一区二区| 成人做爰www看视频软件| 99在线视频精品| 手机av免费看| 亚洲国产电影在线观看| chinese全程对白| 亚洲激情在线激情| 久视频在线观看| 色综合久久66| 亚洲一区二区三区网站| 日韩一区二区三区高清免费看看| 性猛交富婆╳xxx乱大交天津| 亚洲成年人在线| 国产理论电影在线观看| 精品国产欧美成人夜夜嗨| 日本成人在线播放| 欧美激情a在线| 欧美电影网址| 亚洲一区中文字幕| 露出调教综合另类| 日韩精品一区二区三区色偷偷| 欧美成人自拍| 无码 制服 丝袜 国产 另类| 久热综合在线亚洲精品| 五月天婷婷在线观看视频| www.亚洲人| 午夜黄色福利视频| 一区二区三区日韩在线观看| 国产精品视频免费播放| 欧美日韩一区二区三区不卡| 亚洲高清精品视频| 亚洲欧美激情四射在线日| 日本a在线播放| 91精品国产91久久久久久| 成人四虎影院| 国产精品一区二区三区精品| 人人狠狠综合久久亚洲婷| 国产精品一色哟哟| 奇米精品一区二区三区在线观看| 亚洲精品鲁一鲁一区二区三区| 久久久亚洲精品石原莉奈| 麻豆精品一区二区三区视频| 色综合色综合色综合 | 国产婷婷色综合av蜜臀av| 三级外国片在线观看视频| 午夜精品一区二区三区视频免费看 | 在线精品亚洲| www.久久久精品| 97aⅴ精品视频一二三区| 国产探花在线播放| 91成人免费网站| 婷婷五月综合久久中文字幕| 大胆人体色综合| 亚洲国产尤物| 久久久久成人精品免费播放动漫| 亚洲最大黄网| 色婷婷狠狠18| 久久综合色天天久久综合图片| 三级影片在线看| 欧美日韩午夜在线| 久蕉在线视频| 97精品国产97久久久久久| 高清一区二区三区av| 日韩偷拍一区二区| 一本色道久久| 91精品啪在线观看国产| 亚洲视频一区在线| 中文字幕 国产| 亚洲乱码av中文一区二区| 美女精品导航| 999在线免费观看视频| 999久久久免费精品国产| 欧美日韩大尺度| 久久久噜噜噜久噜久久综合| 日韩手机在线观看| 精品国精品国产| 色黄网站在线观看| 5g国产欧美日韩视频| 欧美一区二区| 日本高清免费在线视频| 国产精品高潮呻吟| 中国一级片黄色一级片黄| 亚洲午夜av久久乱码| 免费观看亚洲| 欧美日韩一区二区三| 久久久久欧美精品| 97在线观看免费视频| 在线视频中文字幕一区二区| 久久国产精品高清一区二区三区| 国产91在线播放九色快色| 美女毛片一区二区三区四区| 中文字幕乱码人妻综合二区三区| 91在线精品一区二区三区| 亚洲 欧美 日韩 综合| 亚洲精品国精品久久99热 | 欧美日韩国产一区在线| 亚洲欧美一区二区三| 欧美有码在线观看视频| 亚洲综合图色| 精品久久久久久中文字幕2017| 久久精品亚洲精品国产欧美kt∨| 涩涩视频在线观看| 精品国产欧美一区二区五十路| 国产精品va视频| 国产毛片久久久久久国产毛片| www.av亚洲| 波多野结衣视频观看| 日韩中文字幕国产| 精品久久亚洲| 午夜免费福利小电影| 久久久久久毛片| 国产免费一区二区三区免费视频| 久久6精品影院| 日韩精品导航| 国产高清视频网站| 亚洲精品久久7777| 天天摸天天干天天操| 国产精品99久久久久久www| 久久人人88| 人妻激情偷乱频一区二区三区| 欧美色图在线视频| 日本蜜桃在线观看| 国产精品v欧美精品v日韩精品| 亚洲综合另类| 日韩三级久久久| 亚洲国产精品一区二区久| av成人免费| 超碰成人免费在线| 国产视频亚洲色图| 不卡的日韩av| 国产不卡av在线免费观看| 亚洲女同另类| 中文字幕一二三四区| 91麻豆精品国产无毒不卡在线观看 | 热re91久久精品国99热蜜臀| 欧美hd在线| 特级西西人体4444xxxx| 欧美日本在线播放| 国产精品xx| 最新国产精品久久| 91精品国产综合久久福利| 青青国产在线| 成人av.网址在线网站| 亚洲美女一区| chinese全程对白| 亚洲欧美另类自拍|