精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文字幕 自拍偷拍| 麻豆国产精品一区| 亚洲第一图区| 99久久婷婷国产| 国产精品九九久久久久久久| 免费成人深夜夜行网站| 国产精品流白浆在线观看| 色成年激情久久综合| 欧美成人一区二区三区在线观看 | 亚洲成人tv网| 亚洲 日韩 国产第一区| 欧美一级免费片| 老司机精品福利视频| 美日韩精品免费观看视频| 欧美一区二区三区成人精品| 精品国产不卡一区二区| 91久久精品国产91性色tv| 久久综合亚洲精品| eeuss影院www在线观看| 成人动漫中文字幕| 成人在线一区二区| 无码一区二区三区| 亚洲美女色禁图| 久久视频这里只有精品| 青娱乐国产视频| 狼人精品一区二区三区在线 | caoporm在线视频| 欧美aa视频| 五月天激情综合| 天堂8在线天堂资源bt| 午夜伦全在线观看| 国产欧美一区二区在线| 免费观看成人在线| 日韩性xxxx| 国产成人综合网| 国产日韩视频在线观看| 国产污视频网站| 一区二区三区国产在线| 欧美成人sm免费视频| 美国一级黄色录像| 成人激情开心网| 亚洲女人被黑人巨大进入| 国产精品成人无码专区| baoyu135国产精品免费| 日韩一级欧美一级| 欧美性猛交乱大交| 日韩中文字幕一区二区高清99| 欧美日韩精品电影| 亚洲免费黄色网| 欧美成人xxxx| 欧美日韩mp4| 天天干天天爽天天射| 第四色男人最爱上成人网| 日韩欧美国产高清91| av动漫在线看| 欧美magnet| 91黄视频在线观看| av网站在线不卡| 免费成人高清在线视频| 欧美蜜桃一区二区三区| 九九热精品在线播放| 欧美aaaaaa| 欧美一级在线视频| 97中文字幕在线观看| 亚洲1区在线| 亚洲激情免费观看| 国产特黄级aaaaa片免| 国产一区二区三区不卡视频网站| 亚洲一区二区福利| 久草福利资源在线| 最新精品国产| 97国产在线视频| 久久永久免费视频| 美女视频一区二区| 97国产超碰| 日本黄色三级视频| 久久久噜噜噜久久中文字幕色伊伊| 日本电影一区二区三区| 91视频在线观看| 一区二区在线观看不卡| 国产精品宾馆在线精品酒店| 成人亚洲视频| 日韩视频免费观看高清完整版在线观看| 无人码人妻一区二区三区免费| 豆花视频一区二区| 亚洲无av在线中文字幕| 国产真实乱在线更新| 99成人在线| 国产精品吴梦梦| 亚洲男女视频在线观看| 久久综合狠狠综合久久综合88| 日韩免费电影一区二区| 成人免费看片| 欧美色另类天堂2015| 污污网站在线观看视频| 老牛影视av一区二区在线观看| 亚洲人成电影网站色…| 欧美成人精品欧美一级私黄| 国产精品永久| 91福利视频导航| 黄色在线网站| 亚洲一级电影视频| 婷婷免费在线观看| 国内精品偷拍| 久久久999精品| 精品国产xxx| 福利电影一区二区| 亚洲精品乱码久久久久久蜜桃91 | 97操在线视频| av电影在线观看网址| 亚洲午夜一区二区| 在线观看免费的av| 偷拍亚洲精品| 欧美福利小视频| 国产一区二区视频免费观看| 久久综合九色综合97婷婷女人 | 毛片在线网站| 欧美成人一区二区三区在线观看| 国产三级短视频| 国产日韩一区二区三区在线播放| 99热在线国产| 草莓福利社区在线| 欧美三级乱人伦电影| avtt香蕉久久| 亚洲三级免费| 99热最新在线| 欧美极品少妇videossex| 在线不卡免费av| 国产精品免费在线视频| 久久看片网站| 欧美日韩在线一二三| 国产精选在线| 日韩av网站大全| 伊人国产在线观看| 大美女一区二区三区| 粉嫩av一区二区三区天美传媒 | 九九**精品视频免费播放| 日本黑人久久| 神马久久资源| 国产亚洲欧美日韩美女| 午夜精品久久久久久久蜜桃| 91免费国产视频网站| 国产黄视频在线| 欧美挤奶吃奶水xxxxx| 久久久中文字幕| 亚洲黄色一级大片| 亚洲一卡二卡三卡四卡无卡久久| 丰满少妇一区二区三区专区| 香蕉综合视频| 99国产在线| 国产高清中文字幕在线| 精品亚洲国产成av人片传媒| 超碰中文字幕在线| 久久久久久久久97黄色工厂| 色婷婷综合久久久久中文字幕| 亚州av日韩av| 国产v综合v亚洲欧美久久| 国产小视频免费在线网址| 日本精品视频一区二区三区| 午夜理伦三级做爰电影| 日本欧美在线观看| 亚洲一区在线免费| 欧美不卡在线观看| 久久久视频在线| 香蕉国产在线视频| 欧美曰成人黄网| 久久人妻无码aⅴ毛片a片app| 激情综合网av| 欧美中日韩在线| 希岛爱理av免费一区二区| 国产福利精品在线| 日本三级视频在线观看| 日韩一级片在线播放| 99热只有这里有精品| 国产精品免费视频一区| 欧美专区第二页| 国产亚洲毛片在线| 亚洲欧美久久久久一区二区三区| 欧美第一在线视频| 欧美亚洲一级片| 日韩毛片久久久| 亚洲福利视频网| 亚洲永久精品一区| 亚洲综合自拍偷拍| 国产综合精品在线| 国产宾馆实践打屁股91| 国产成人久久婷婷精品流白浆| 日韩在线观看| 国产精品青青草| 视频一区在线免费看| 欧美夫妻性生活xx| 国产精品秘入口| 精品av久久707| 又污又黄的网站| 午夜亚洲国产au精品一区二区| 99精品欧美一区二区| 国产69精品久久777的优势| 欧美一级黄色影院| 亚洲国产精品第一区二区三区| 日韩一区二区电影在线观看| 视频精品一区| 成人av在线网址| 桃花岛tv亚洲品质| 色在人av网站天堂精品| 在线观看国产原创自拍视频| 亚洲成人网在线观看| 国产精品伦理一区| 欧美午夜精品伦理| 国产真实的和子乱拍在线观看| 国产欧美精品一区二区三区四区 | jizz中国少妇| 欧美图片一区二区三区| 在线观看黄网站| 亚洲国产人成综合网站| 欧美精品久久久久久久久46p| 久久夜色精品国产欧美乱极品| 亚洲天堂小视频| 精品一区二区三区免费| 亚洲xxxx2d动漫1| 久久成人一区| 极品美女扒开粉嫩小泬| 亚洲蜜桃视频| 中文字幕一区二区三区四区五区六区 | 亚洲色偷偷综合亚洲av伊人| 国产天堂亚洲国产碰碰| 亚洲最大免费视频| 91在线精品一区二区三区| 亚洲熟妇一区二区| 国产精品一区久久久久| 黄大色黄女片18第一次| 奇米精品一区二区三区在线观看一 | 亚洲影影院av| 亚洲欧美在线人成swag| 国产精品尤物福利片在线观看| 日韩电影网站| 国产98色在线| 极品美女一区| 国产精品成人av在线| 国产精品极品美女在线观看| 奇米4444一区二区三区| 中文字幕人成乱码在线观看| **欧美日韩vr在线| 在线人成日本视频| 日本午夜精品理论片a级appf发布| 国产极品在线观看| 欧美最顶级的aⅴ艳星| 韩国成人动漫| 国产精品白嫩初高中害羞小美女| 国产精品videossex撒尿| 国产精品久久久久久婷婷天堂| 91p九色成人| 成人免费网站在线| 亚洲精品一区二区三区中文字幕| 99久久精品免费看国产四区| 国产毛片精品| 欧美大香线蕉线伊人久久国产精品| 嫩草影视亚洲| 亚洲图色在线| 一区二区日韩欧美| 草草视频在线免费观看| av不卡免费看| 天堂中文视频在线| 精品一区二区综合| 国产人妖在线观看| 99在线精品免费| 色婷婷在线影院| 国产精品夫妻自拍| 青青操国产视频| 午夜激情久久久| 久草视频在线免费| 欧美一区二区三区精品| 色呦呦中文字幕| 一区二区成人av| 在线不卡日本v二区707| 1769国产精品| 粉嫩av国产一区二区三区| 成人欧美一区二区三区视频| 自拍偷拍精品| 免费看污污视频| 国产欧美日本| 亚洲国产成人va在线观看麻豆| 国产精品资源网| 美国黄色一级毛片| 18欧美亚洲精品| 日本午夜视频在线观看| 欧美日韩亚洲丝袜制服| 人人妻人人澡人人爽久久av| 中文字幕九色91在线| 色呦呦在线观看视频| 日本不卡免费高清视频| 日韩欧洲国产| 性欧美.com| 亚洲高清久久| 日韩av片免费观看| 久久久亚洲欧洲日产国码αv| 久久久精品少妇| 欧美日韩在线影院| 国产免费久久久| 在线色欧美三级视频| 超清av在线| 91精品美女在线| 亚洲区小说区图片区qvod| 中国一级大黄大黄大色毛片| 久久中文精品| 久久久午夜精品福利内容| 亚洲女同女同女同女同女同69| 五月婷婷亚洲综合| 欧美成人精品高清在线播放| 91伦理视频在线观看| 欧美在线不卡区| 9l视频自拍蝌蚪9l视频成人| 一区二区免费电影| 日韩中文字幕一区二区三区| 色黄视频免费看| 中文在线免费一区三区高中清不卡| 黄网站免费在线| 欧美一区二区精品| 在线观看a视频| 日本欧美精品在线| 少妇一区二区三区| av免费观看国产| 国产91精品入口| 国产97免费视频| 欧美日韩国产综合久久| 国产youjizz在线| 人人爽久久涩噜噜噜网站| 红杏aⅴ成人免费视频| 污污污污污污www网站免费| 国产真实精品久久二三区| 五月天婷婷丁香网| 欧美色视频在线| 国产黄在线观看| 国产精品1234| 国产成人精品免费视| 日韩av资源在线| 91网址在线看| 日韩欧美成人一区二区三区| 日韩大陆欧美高清视频区| 久久男人天堂| 女人一区二区三区| 老司机精品视频网站| 一区二区精品免费| 欧美一a一片一级一片| av女优在线| 国产在线一区二区三区| 99久久夜色精品国产亚洲96 | 国产女主播一区| 中文字幕一区二区在线视频 | 日韩你懂的电影在线观看| av网站导航在线观看免费| 亚洲xxx视频| 欧美日韩一区二区三区四区在线观看 | 精品国产三区在线| 久久www视频| 成人禁用看黄a在线| 精品成人久久久| 日韩经典第一页| 精品日韩视频| 在线观看日韩片| 丁香一区二区三区| 久久久久久久久久免费视频 | 国产亚洲第一区| 国产亚洲永久域名| 免费成人深夜天涯网站| 欧美日本不卡视频| 国产丝袜在线播放| 日本精品一区二区| 久久成人羞羞网站| 国产一级av毛片| 亚洲男女性事视频| 在线免费成人| 成人午夜免费在线| 国产日韩精品一区二区三区| 亚洲一区二区三区高清视频| 欧美乱大交做爰xxxⅹ性3| 伊人影院久久| 亚洲一区二区三区成人在线视频精品| 视频在线不卡免费观看| 99精品视频免费版的特色功能| 一区二区三区视频在线观看| 色香蕉在线视频| 国产精品视频一| 欧美久久久久| 丰满少妇高潮一区二区| 欧美日本精品一区二区三区| 日韩成人伦理| 日本在线视频一区| 国产精品123区| 一级黄色在线视频| 欧美精品亚州精品| 色棕色天天综合网| 日韩av影视大全| 都市激情亚洲色图| 高潮毛片在线观看| 美女一区视频| 国产**成人网毛片九色| 男人的天堂av网站| 国产+成+人+亚洲欧洲| 91视频精品| 久久久久久久久久久国产精品|