Python匿名函數(shù)Lambda

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

在Python中,通過lambda關(guān)鍵字來定義的函數(shù)稱為匿名函數(shù)大诸;
lambda函數(shù)能接收任何數(shù)量(可以是0個)的參數(shù)苟蹈,但只能返回一個表達(dá)式的值,lambda函數(shù)是一個函數(shù)對象丝蹭,直接賦值給一個變量,這個變量就成了一個函數(shù)對象
語法:lambda 參數(shù) : 表達(dá)式
先寫lambda關(guān)鍵字坪蚁,然后依次寫匿名函數(shù)的參數(shù)奔穿,多個參數(shù)中間用英文逗號分隔,然后是一個英文冒號敏晤,冒號后面寫返回的表達(dá)式贱田;
使用場景:
1.需要將一個函數(shù)對象作為參數(shù)來傳遞時,可以直接定義一個lambda函數(shù)(作為函數(shù)的參數(shù)或返回值一)嘴脾;
2.要處理的業(yè)務(wù)符合lambda函數(shù)的情況(任意多個參數(shù)和一個返回值)男摧,并且只有一個地方會使用這個函數(shù),不會在其他地方重用译打,可以使用lambad函數(shù)耗拓;
3.與一些python的內(nèi)置函數(shù)配合合適,提高代碼的可讀性奏司;

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

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))

運行結(jié)果:

10101
10101

可以看到乔询,lambda適用于多個參數(shù)、一個返回值的情況韵洋,可以用一個變量來接收竿刁,變量是一個函數(shù)對象黄锤,執(zhí)行這個函數(shù)對象的結(jié)果與執(zhí)行一個普通函數(shù)的結(jié)果一樣。

lambda函數(shù)比普通函數(shù)更簡潔食拜,且沒有聲明函數(shù)名鸵熟,上面的代碼是用一個變量來接收lambda函數(shù)返回的函數(shù)對象,并不是lambda函數(shù)的名字负甸。

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

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

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

#多個參數(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))

運行結(jié)果:

1001
100
18
6
6

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

4.lambda作為一個參數(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)

運行結(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)

運行結(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))

運行結(jié)果:

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

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

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

  • 使用Python寫一些腳本時,使用lambda可以省去定義函數(shù)的過程炸茧,讓代碼更精簡瑞妇;
  • 對于一些抽象的,不會被別的地方再重復(fù)使用的函數(shù)梭冠,有時候函數(shù)起個名稱也是個難題辕狰,使用lambda不需要考慮命命名問題;
  • 使用lambda在某些時候代碼更容易理解
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末控漠,一起剝皮案震驚了整個濱河市蔓倍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盐捷,老刑警劉巖偶翅,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碉渡,居然都是意外死亡聚谁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門滞诺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垦巴,“玉大人媳搪,你說我怎么就攤上這事侈贷±堆幔” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵宙彪,是天一觀的道長憔披。 經(jīng)常有香客問我等限,道長,這世上最難降的妖魔是什么芬膝? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任望门,我火速辦了婚禮,結(jié)果婚禮上锰霜,老公的妹妹穿的比我還像新娘筹误。我一直安慰自己,他們只是感情好癣缅,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布厨剪。 她就那樣靜靜地躺著,像睡著了一般友存。 火紅的嫁衣襯著肌膚如雪祷膳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天屡立,我揣著相機與錄音直晨,去河邊找鬼。 笑死膨俐,一個胖子當(dāng)著我的面吹牛勇皇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焚刺,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼儒士,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了檩坚?” 一聲冷哼從身側(cè)響起着撩,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匾委,沒想到半個月后拖叙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赂乐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年薯鳍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡挖滤,死狀恐怖崩溪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斩松,我是刑警寧澤伶唯,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站惧盹,受9級特大地震影響乳幸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钧椰,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一粹断、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫡霞,春花似錦瓶埋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娄徊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盾戴,已是汗流浹背寄锐。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尖啡,地道東北人橄仆。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像衅斩,于是被迫代替她去往敵國和親盆顾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 匿名函數(shù): 等價于: 關(guān)鍵字 lambda 表示匿名函數(shù)畏梆,冒號前面的 x 表示函數(shù)參數(shù)您宪。 匿名函數(shù)有個限制,就是只...
    帥氣的_xiang閱讀 496評論 0 1
  • 當(dāng)我們在創(chuàng)建函數(shù)時奠涌,有些時候宪巨,不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便溜畅。這省去了我們挖空心思為函數(shù)命名的麻煩捏卓,...
    天涼玩?zhèn)€錘子閱讀 171評論 0 0
  • 在python中,除了一般使用def定義的函數(shù)外慈格,還有一種使用lambda定義的匿名函數(shù)怠晴。這種函數(shù)可以用在任何普通...
    王吉吉real閱讀 4,848評論 0 2
  • lambda作為匿名函數(shù)遥金,是不需要函數(shù)名的。 是Python一種生成函數(shù)對象的表達(dá)形式蒜田。 lambda函數(shù)是一個可...
    Natsuka閱讀 148評論 0 0
  • 匿名函數(shù)稿械,就是指沒有名字的函數(shù),也稱為 "lambda函數(shù)" 語法物邑,lambda 參數(shù)1, 參數(shù)2.. : 表達(dá)式...
    精進的棍子閱讀 111評論 0 0