最近做OJ遇到了一道排序題,由於python運行一直超時,無奈之下在CSDN找該題的優化解法,雖然最終沒有解決問題但我驚喜的發現了python裏一個有趣的函數——lambda
正好在下篇文章中我將分享的嵌套列表的排序用到了lambda,所以在此介紹lambda
我們先來看一下python一般的函數的聲明
>>>def power(x,y):
return x**y
>>>power(2,2)
4
lambda提供了更簡潔的聲明方式
>>>power=lambda x,y:x**y
>>>power(2,2)
4
害,這lambda也不過爾爾,只是比def方便些,何必浪費筆墨介紹
諸君切記,不可管中窺豹
來看看下面這個例子
>>>(lambda x,y:x**y)(2,2)
lambda與def本質區別在於,我們不需要用一個特定的名稱來承接這個函數,只需要在lambda裏描述好函數的功能,拿來用就行
那麼lambda的返回值呢?lambda帶有一個隱式的返回值
lambda的應用
由於lambda不需要函數名的特點,它可以應用在一些函數的參數中,就比如我上文中提到的嵌套列表的排序
>>> lists=[[2,'a'],[1,'c'],[3,'b']]
>>> lists.sort(key=lambda x:x[0])
>>> lists
[[1, 'c'], [2, 'a'], [3, 'b']]
這樣我們就不用額外def一個函數來指定排列的關鍵字
與此同時,lambda帶來了降低代碼可讀性的問題,將lambda與list()、map()和filter()結合起來這種炫技着實讓人頭疼
lambda不可濫用,該歸隱山林的時候還得歸隱山林