題圖:megan-lewis-601414-unsplash
01
lambda表達(dá)式
python書寫簡(jiǎn)單,功能強(qiáng)大, 迅速發(fā)展成為 AI ,深度學(xué)習(xí)的主要語言。介紹Python中的lambda表達(dá)式,注意到,它只是一個(gè)表達(dá)式,不是語句啊。
lambda的語法規(guī)則: 一個(gè)或多個(gè)參數(shù)以冒號(hào)終止輸入?yún)?shù),這些參數(shù)可以理解為有名函數(shù)原型的輸入?yún)?shù),以后是一個(gè)表達(dá)式,相當(dāng)于有名函數(shù)的函數(shù)體部分。lambda的函數(shù)體部分,是作為返回值輸出部分。
02
場(chǎng)景1:map 和 reduce
Python 中的 map 和 reduce,再結(jié)合 lambda表達(dá)式的話,使用起來會(huì)更加高效,如下所示:
def sum(mylist):
return reduce(lambda x, y: 2*x + 1*y, mylist)
可以看到兩個(gè)輸入?yún)?shù) x, y , 返回為 2*x + y ,通過這樣對(duì) mylist 的元素完成化簡(jiǎn)操作。
03
場(chǎng)景2: lambda 和 list 結(jié)合使用
這個(gè)場(chǎng)景在面試中經(jīng)常被問到,如下所示:
li = [lambda :x for x in range(10)]
得到一個(gè) lambda 的list,打印 li[0]() 會(huì)得到什么,注意這種調(diào)用方法,因?yàn)槭菙?shù)組,先拿第一個(gè)元素,li[0],后面的括號(hào)表示調(diào)用lambda表達(dá)式。打印的結(jié)果為 0 嗎?
NO!是 9
lambda表達(dá)式不會(huì)形成對(duì)函數(shù)體內(nèi)變量的記憶,只記錄最后一個(gè)狀態(tài)。
那么如果lambda的入?yún)⒅袔в衳, 會(huì)得到我們想要的結(jié)果0 嗎?
li = [lambda x :x for x in range(10)]
res = li[0](0)
print(res)
輸出:0
因此,需要注意區(qū)分這兩種寫法的不同,記得這個(gè)區(qū)別,在一次新浪面試中,曾經(jīng)被問到。希望對(duì)大家有用。
聯(lián)系客服