lambda使用

來源于https://blog.csdn.net/youzhouliu/article/details/78948140
簡單來說指煎,編程中提到的 lambda 表達式秉犹,通常是在需要一個函數(shù)镜廉,但是又不想費神去命名一個函數(shù)的場合下使用奠宜,也就是指匿名函數(shù)扇住。其一般有如下幾種使用方式:

1盈厘、lambda的一般形式是關(guān)鍵字lambda后面跟一個或多個參數(shù)睁枕,緊跟一個冒號,以后是一個表達式沸手。lambda是一個表達式而不是一個語句外遇。它能夠出現(xiàn)在Python語法不允許def出現(xiàn)的地方。作為表達式契吉,lambda返回一個值(即一個新的函數(shù))跳仿。lambda用來編寫簡單的函數(shù),而def用來處理更強大的任務(wù)捐晶。例如:

f = lambda x,y,z : x+y+z  
print f(1,2,3)  
  
g = lambda x,y=2,z=3 : x+y+z  
print g(1,z=4,y=5) 
 
結(jié)果:
6  
10

2菲语、lambda表達式常用來編寫跳轉(zhuǎn)表(jump table)妄辩,就是行為的列表或字典。例如:

L = [(lambda x: x**2),  
    (lambda x: x**3),  
    (lambda x: x**4)]  
print L[0](2),L[1](2),L[2](2)  
  
D = {'f1':(lambda: 2+3),  
    'f2':(lambda: 2*3),  
    'f3':(lambda: 2**3)}  
print D['f1'](),D['f2'](),D['f3']() 
 
結(jié)果:
4 8 16  
5 6 8 

3山上、lambda表達式可以嵌套使用眼耀,但是從可讀性的角度來說,應(yīng)盡量避免使用嵌套的lambda表達式佩憾。

Lambda函數(shù)又稱匿名函數(shù)哮伟,匿名函數(shù)就是沒有名字的函數(shù),函數(shù)沒有名字也行妄帘?當(dāng)然可以啦楞黄。有些函數(shù)如果只是臨時一用,而且它的業(yè)務(wù)邏輯也很簡單時抡驼,就沒必要非給它取個名字不可鬼廓。lamdba函數(shù)的正確使用場景:

1、函數(shù)式編程

盡管Python算不上是一門純函數(shù)式編程語言致盟,但它本身提供了很多函數(shù)式編程的特性碎税,Python中,也有幾個定義好的全局函數(shù)方便使用的勾邦,像map蚣录、reduce、filter眷篇、sorted這些函數(shù)都支持函數(shù)作為參數(shù)萎河,lambda函數(shù)就可以應(yīng)用在函數(shù)式編程中。如下:

from functools import reduce 
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
 
print (list(filter(lambda x: x % 3 == 0, foo)))
#[18, 9, 24, 12, 27]
 
print (list(map(lambda x: x * 2 + 10, foo)))
#[14, 46, 28, 54, 44, 58, 26, 34, 64]
 
print (reduce(lambda x, y: x + y, foo))
#139

2蕉饼、閉包

閉包本身是一個晦澀難懂的概念虐杯,在這里我們以簡單粗暴地理解為閉包就是一個定義在函數(shù)內(nèi)部的函數(shù),閉包使得變量即使脫離了該函數(shù)的作用域范圍也依然能被訪問到昧港。lambda函數(shù)作為閉包的例子:

>>> def my_add(n):
...     return lambda x:x+n
>>> add_3 = my_add(3)
>>> add_3(7)
10

這里lambda函數(shù)就是一個閉包擎椰,在全局作用域范圍中,add_3(7)可以正常執(zhí)行且返回值為10创肥,之所以返回10是因為在my_add局部作用域中达舒,變量n的值在閉包的作用使得它在全局作用域也可以被訪問到。

換成常規(guī)函數(shù)也可以實現(xiàn)閉包叹侄,只不過是這種方式稍顯啰嗦巩搏,如下:

>>> def my_add(n):
...     def wrapper(x):
...         return x+n
...     return wrapper
...
>>> add_5 = my_add(5)
>>> add_5(2)
7

不過不是任何情況lambda函數(shù)都要比常規(guī)函數(shù)更清晰明了,看這個例子:
f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]
這是返回某個集合的所有子集的lambda函數(shù)趾代,相信你要看一會兒才能看明白贯底。
python中有這樣一句話是Explicit is better than implicit(明了勝于晦澀)。若用lambda函數(shù)不能使代碼變得更清晰撒强,就要考慮使用常規(guī)的方式來定義函數(shù)禽捆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笙什,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胚想,更是在濱河造成了極大的恐慌琐凭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顿仇,死亡現(xiàn)場離奇詭異淘正,居然都是意外死亡,警方通過查閱死者的電腦和手機臼闻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囤采,“玉大人述呐,你說我怎么就攤上這事〗短海” “怎么了乓搬?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長代虾。 經(jīng)常有香客問我进肯,道長,這世上最難降的妖魔是什么棉磨? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任江掩,我火速辦了婚禮,結(jié)果婚禮上乘瓤,老公的妹妹穿的比我還像新娘环形。我一直安慰自己,他們只是感情好衙傀,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布抬吟。 她就那樣靜靜地躺著,像睡著了一般统抬。 火紅的嫁衣襯著肌膚如雪火本。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天聪建,我揣著相機與錄音钙畔,去河邊找鬼。 笑死妆偏,一個胖子當(dāng)著我的面吹牛刃鳄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钱骂,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼叔锐,長吁一口氣:“原來是場噩夢啊……” “哼挪鹏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起愉烙,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讨盒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后步责,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體返顺,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年蔓肯,在試婚紗的時候發(fā)現(xiàn)自己被綠了遂鹊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔗包,死狀恐怖秉扑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情调限,我是刑警寧澤舟陆,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耻矮,受9級特大地震影響秦躯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裆装,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一踱承、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧米母,春花似錦勾扭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慧耍,卻和暖如春身辨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芍碧。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工煌珊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泌豆。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓定庵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔬浙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355