大家好,歡迎來到 Crossin的編程教室 !
這幾天,有同學(xué)在答疑群里問,能不能講解一下“lambda函數(shù)”的使用?今天我們就來分享一篇文章,給大家總結(jié)下lambda函數(shù)的相關(guān)知識(shí)點(diǎn)。lambda函數(shù)又叫做“匿名函數(shù)”。當(dāng)你需要完成一件小工作時(shí),直接使用該函數(shù)可以讓你的工作得心應(yīng)手。下面我們將通過一些例子具體說明。1. lambda函數(shù)介紹
在Python中,定義函數(shù)使用的是def關(guān)鍵字,并要提供一個(gè)函數(shù)名稱。但是通過lambda關(guān)鍵字來定義的函數(shù)不需要提供名稱,因此稱之為“匿名函數(shù)”。- ①先寫lambda關(guān)鍵字,②然后依次寫匿名函數(shù)的參數(shù),多個(gè)參數(shù)之間用逗號(hào)連接,③接著是一個(gè)冒號(hào),④冒號(hào)后面寫的是返回的表達(dá)式。
- lambda函數(shù)能接收任意多個(gè)參數(shù),但只能返回一個(gè)表達(dá)式的值;
- lambda函數(shù)是一個(gè)函數(shù)對象,如果直接賦值給一個(gè)變量,這個(gè)變量就成了一個(gè)函數(shù)對象;
當(dāng)待處理的業(yè)務(wù)符合匿名函數(shù)的特點(diǎn):多個(gè)參數(shù)和一個(gè)返回值,并且該函數(shù)只在一個(gè)地方使用,不在其他地方復(fù)用,建議使用lambda函數(shù)。
2. lambda函數(shù)的簡單使用
下面我們寫個(gè)例子:帶有一個(gè)參數(shù)的匿名函數(shù)。In[1]:lambda x: x + 2
Out[1]:<function __main__.<lambda>(x)>
接著,使用type()函數(shù)打印該函數(shù)的類型,得到的是一個(gè)function函數(shù)對象。In[1]:type(lambda x: x + 2)
Out[1]:function
我們可以使用第一種方式:直接調(diào)用匿名函數(shù),但是顯得有點(diǎn)別扭。注意:通過這種方式調(diào)用匿名函數(shù),匿名函數(shù)和實(shí)參都需要用括號(hào)括起來。In[1]:(lambda x: x + 2 )(2)
Out[1]:4
當(dāng)然我們也可以使用第二種方式(強(qiáng)烈建議),將匿名函數(shù)傳遞給一個(gè)參數(shù),調(diào)用匿名函數(shù)。注意:通過這種方式調(diào)用匿名函數(shù),變量名+括號(hào)。In[1]:a = lambda x: x + 2
a(2)
Out[1]:4
3. lambda函數(shù)的不同形式
lambda函數(shù)中可以不傳參數(shù),可以傳遞一個(gè)參數(shù),二個(gè)參數(shù),或者傳遞多個(gè)參數(shù)。3.1 無參數(shù)的lambda函數(shù)
不管是有參數(shù)還是無參數(shù),調(diào)用一定是變量名+括號(hào),即這個(gè)括號(hào)不能省略,否則返回的是一個(gè)function函數(shù)對象。In[1]:x1 = lambda: 88
print(x1())
3.2 單參數(shù)的lambda函數(shù)
單參數(shù)指的是匿名函數(shù)中只有一個(gè)參數(shù),下面來看一個(gè)例子。In[1]:b = lambda x: x + 2
print(b(8))
3.3 多參數(shù)的lambda函數(shù)
多參數(shù)指的是匿名函數(shù)中有多個(gè)參數(shù),下面來看一個(gè)例子。In[1]:c = lambda x,y: x*y
print(c(2,5))
3.4 帶分支的lambda函數(shù)
有時(shí)候我們可以根據(jù)給定的參數(shù),來判斷接下來需要做什么,這就需要匿名函數(shù)結(jié)合分支表達(dá)式使用了。In[1]:d = lambda x: x-1 if x > 5 else x+1
print(d(9))
print(d(3))
4. lambda函數(shù)與Python內(nèi)置函數(shù)配合使用
其實(shí)lambda函數(shù)更多的時(shí)候是與sorted函數(shù),map函數(shù)和filter函數(shù)等聯(lián)合使用。這里以sorted函數(shù)為例進(jìn)行舉例說明。4.1 對列表里的字典排序
l = [{'a': 1, 'b': 41}, {'a': 1111, 'b': 24}, {'a': 1111, 'b': 32}]
l_s = sorted(l, key=lambda x: x["b"], reverse=True)
print(l_s)
4.2 對字典進(jìn)行key排序
m = {'a':25, 'c':27, 'b':20, 'd':22}
m_s = sorted(m.items(), key=lambda x: x[0])
print(m_s)
4.3 對字典進(jìn)行values排序
n = {'a':25, 'c':27, 'b':20, 'd':22}
n_s = sorted(n.items(), key=lambda x: x[1])
print(n_s)
4.4 其它用法
list(map(lambda x: x*x, range(1, 11)))
list(filter(lambda x: x % 2 == 0, range(1, 11)))
以上便是 lambda 匿名函數(shù)的相關(guān)知識(shí)點(diǎn)和常見用法。大家可以自己嘗試寫一寫,熟悉lambda的用法。用好它,會(huì)讓你的代碼看起來更加簡潔,更加pythonic。如果文章對你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~作者:黃偉呢
來源:數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)之美
_往期文章推薦_
如需了解付費(fèi)精品課程及教學(xué)答疑服務(wù)請?jiān)?strong style="max-width: 100%;overflow-wrap: break-word !important;box-sizing: border-box !important;">Crossin的編程教室內(nèi)回復(fù): 666