學會Lambda,讓程式Pythonic一點

王平發表於2019-08-15

​Lambda是Python裡的高階用法,要把程式碼寫得Pythonic,就需要了解這些高階用法,想說自己是一名真正的Python程式設計師,先要把程式碼寫得Pythonic。

今天聊下Lambda的用法,寫篇簡短的用法說明。

python lambda用法

Lambda是匿名函式的意思,在程式中有些簡單的函式我們可能只會使用一兩次,這種情況下,你不必把它寫成一個函式,而是用Lambda的寫法,來讓程式更簡潔。

Lambda的寫法原型是:
lambda 引數:操作(引數)

冒號左邊是傳入的引數,冒號右邊是使用引數要做的操作。

比如


lambda x:x+1

上面的寫法等同於如下寫法,給引數加1,再返回:


def plus(x):
return x+1

比如


lambda x,y:x*y

上面的寫法等同於:


def mul(x,y):
retuen x*y

舉幾個實際的例子:
1.比如對list排序,如下簡單的list
nums = [3, 1, 7, 4, 8, 10]
對nums按降序排列,這個很簡單是吧:


>>>nums = [3, 1, 7, 4, 8, 10]>>>sorted(nums, reverse=True)>>>[10, 8, 7, 4, 3, 1]

如果是對巢狀list排序呢?
比如:nums = [[10, 20, 11], [3, 9, 6], [8, 14, 3]]
我們想按每個元素裡的第二個值降序排列

直接用上面sorted的寫法就沒法排序,這個時候用lambda就很方便:


>>>nums = [[10, 20, 11], [3, 9, 6], [8, 14, 3]]
>>>sorted(nums, key=lambda x:x[1], reverse=True)
>>>[[10, 20, 11], [8, 14, 3], [3, 9, 6]]

這個巢狀列表就按沒想元素的第二個值降序排列好了,這個lambda的意思是返回元素的第二個值,它的寫法等同於如下:


>>>def lis(x):
>>> return x[1]
>>>sorted(nums, key=lis, reverse=True)
>>>[[10, 20, 11], [8, 14, 3], [3, 9, 6]]

比較一下,用lambda寫程式碼要簡介很多。

2.再比如按字典的value進行降序排序


nums = {'yuan':80, 'ren':93, 'xue':60}
nums = {'yuan':80, 'ren':93, 'xue':60}
sorted(nums, key=lambda x: nums[x], reverse=True)

3.比如想取列表裡的最大值
nums = [‘1’, ‘100’, ‘111’, ‘2’, 2, 2.57]
但是列表裡還有字串,沒法直接比較大小,怎麼做,用lambda來處理。


>>>nums = ['1', '100', '111', '2', 2, 2.57]
>>>max(nums, key=lambda x:int(x))
>>>'111'

這個寫法等同於


def trsn(x):
return int(x)
max(nums, key=trsn)

如果lambda結合map , filter 等高階Python語法,還有更多的用法。

如上用lambda的好處是,讓程式碼更簡潔,這是程式設計師對程式碼的一種追求。壞處就是讓程式不太容易看懂,不過只要你搞清楚了lambda的用法,也沒那麼難懂。

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章