Python匿名函數(shù)Lambda

1.匿名函數(shù)介紹

在Python中,通過(guò)lambda關(guān)鍵字來(lái)定義的函數(shù)稱為匿名函數(shù);
lambda函數(shù)能接收任何數(shù)量(可以是0個(gè))的參數(shù),但只能返回一個(gè)表達(dá)式的值,lambda函數(shù)是一個(gè)函數(shù)對(duì)象,直接賦值給一個(gè)變量,這個(gè)變量就成了一個(gè)函數(shù)對(duì)象
語(yǔ)法:lambda 參數(shù) : 表達(dá)式
先寫lambda關(guān)鍵字,然后依次寫匿名函數(shù)的參數(shù),多個(gè)參數(shù)中間用英文逗號(hào)分隔,然后是一個(gè)英文冒號(hào),冒號(hào)后面寫返回的表達(dá)式;
使用場(chǎng)景:
1.需要將一個(gè)函數(shù)對(duì)象作為參數(shù)來(lái)傳遞時(shí),可以直接定義一個(gè)lambda函數(shù)(作為函數(shù)的參數(shù)或返回值一);
2.要處理的業(yè)務(wù)符合lambda函數(shù)的情況(任意多個(gè)參數(shù)和一個(gè)返回值),并且只有一個(gè)地方會(huì)使用這個(gè)函數(shù),不會(huì)在其他地方重用,可以使用lambad函數(shù);
3.與一些python的內(nèi)置函數(shù)配合合適,提高代碼的可讀性;

2.匿名函數(shù)與普通函數(shù)的對(duì)比

def sum_func(a, b, c):
    return a + b + c

sum_lambda = lambda a, b, c: a + b + c

print(sum_func(1, 100, 10000))
print(sum_lambda(1, 100, 10000))

運(yùn)行結(jié)果:

10101
10101

可以看到,lambda適用于多個(gè)參數(shù)、一個(gè)返回值的情況,可以用一個(gè)變量來(lái)接收,變量是一個(gè)函數(shù)對(duì)象,執(zhí)行這個(gè)函數(shù)對(duì)象的結(jié)果與執(zhí)行一個(gè)普通函數(shù)的結(jié)果一樣。

lambda函數(shù)比普通函數(shù)更簡(jiǎn)潔,且沒(méi)有聲明函數(shù)名,上面的代碼是用一個(gè)變量來(lái)接收l(shuí)ambda函數(shù)返回的函數(shù)對(duì)象,并不是lambda函數(shù)的名字。

3.匿名函數(shù)的多種形式

#無(wú)參數(shù)
lambda_a = lambda :1001
print(lambda_a())

#一個(gè)參數(shù)
lambda_b = lambda b : b * 10
print(lambda_b(10))

#多個(gè)參數(shù)
lambda_c = lambda a,b,c : a+b+c
print(lambda_c(5,6,7))

#表達(dá)式
lambda_d = lambda x: x if x % 2 ==0 else x+1
print(lambda_d(5))
print(lambda_d(6))

運(yùn)行結(jié)果:

1001
100
18
6
6

lambda的參數(shù)可以是0個(gè)或多個(gè),并且返回的表達(dá)式可以是一個(gè)復(fù)雜的表達(dá)式,只要最后返回的是一個(gè)值就可以了;

4.lambda作為一個(gè)參數(shù)傳遞

def sub_func(a,b,func):
    print('a = ',a)
    print('b = ',b)
    print('a + b = ',func(a,b))

sub_func(12,5,lambda a,b:a+b)

運(yùn)行結(jié)果:

a =  12
b =  5
a + b =  17

5.lambda函數(shù)與python內(nèi)置函數(shù)配合使用

#匿名函數(shù)與max()函數(shù)配合使用
list1 = [{'a':10, 'b':20},{'a':13,'b': 2},{'a':23,'b':13},{'a':32,'b':17}]
m = max(list1,key=lambda x :x['a'])
print('列表最大數(shù):',m)

運(yùn)行結(jié)果:

列表最大數(shù): {'a': 32, 'b': 17}

6.lambda作為函數(shù)的返回值

def ret_func(a,b):
    return lambda c : a + b + c
return_func = ret_func(50, 51)
print(return_func)
print(return_func(4))

運(yùn)行結(jié)果:

<function ret_func.<locals>.<lambda> at 0x000001711D2B8400>
105

匿名函數(shù)可以作為一個(gè)函數(shù)的返回值,在如上代碼中,ret_func返回的是一個(gè)匿名函數(shù),返回的是一個(gè)函數(shù)對(duì)象,當(dāng)執(zhí)行這個(gè)函數(shù)時(shí),可以得到lamdba函數(shù)的結(jié)果。
注意:其中a,b兩個(gè)參數(shù)是ret_func中的參數(shù),但執(zhí)行返回的函數(shù)return_func時(shí),已經(jīng)不在ret_func的作用域內(nèi),而lambda函數(shù)仍然能使用a,b,參數(shù),說(shuō)明lambda函數(shù)會(huì)將它的運(yùn)行環(huán)境保存一份,一直保留到它自己執(zhí)行的時(shí)候使用。

7.匿名函數(shù)的優(yōu)點(diǎn)

  • 使用Python寫一些腳本時(shí),使用lambda可以省去定義函數(shù)的過(guò)程,讓代碼更精簡(jiǎn);
  • 對(duì)于一些抽象的,不會(huì)被別的地方再重復(fù)使用的函數(shù),有時(shí)候函數(shù)起個(gè)名稱也是個(gè)難題,使用lambda不需要考慮命命名問(wèn)題;
  • 使用lambda在某些時(shí)候代碼更容易理解
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 匿名函數(shù): 等價(jià)于: 關(guān)鍵字 lambda 表示匿名函數(shù),冒號(hào)前面的 x 表示函數(shù)參數(shù)。 匿名函數(shù)有個(gè)限制,就是只...
    帥氣的_xiang閱讀 523評(píng)論 0 1
  • 當(dāng)我們?cè)趧?chuàng)建函數(shù)時(shí),有些時(shí)候,不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便。這省去了我們挖空心思為函數(shù)命名的麻煩,...
    天涼玩?zhèn)€錘子閱讀 201評(píng)論 0 0
  • 在python中,除了一般使用def定義的函數(shù)外,還有一種使用lambda定義的匿名函數(shù)。這種函數(shù)可以用在任何普通...
    王吉吉real閱讀 4,964評(píng)論 0 2
  • lambda作為匿名函數(shù),是不需要函數(shù)名的。 是Python一種生成函數(shù)對(duì)象的表達(dá)形式。 lambda函數(shù)是一個(gè)可...
    Natsuka閱讀 176評(píng)論 0 0
  • 匿名函數(shù),就是指沒(méi)有名字的函數(shù),也稱為 "lambda函數(shù)" 語(yǔ)法,lambda 參數(shù)1, 參數(shù)2.. : 表達(dá)式...
    精進(jìn)的棍子閱讀 127評(píng)論 0 0

友情鏈接更多精彩內(nèi)容