【速學速記】lambda表達式的兩種應用場景「面試用到」
python書寫簡單,功能強大, 迅速發展成為 AI ,機器學習,深度學習的主要語言。
今天花三分鐘,介紹Python中的lambda表達式,註意到,它只是一個表達式,不是語句啊。
lambda的語法規則: 一個或多個參數以冒號終止輸入參數,這些參數可以理解為有名函數原型的輸入參數,以後是一個表達式,相當於有名函數的函數體部分。lambda的函數體部分,是作為返回值輸出部分。
- 兩種應用功能場景
(1)map 和 reduce
Python 中的 map 和 reduce,使用書寫很方便,詳細可參考: 【每天3分鐘學Python】Python中的 Map 和 Reduce 再結合 lambda表達式的話,使用起來會更加高效,如下所示:
def sum(mylist):
return reduce(lambda x, y: 2x + 1y, mylist)
可以看到兩個輸入參數 x, y , 返回為 2*x + y ,通過這樣對 mylist 的元素完成化簡操作。
(2) lambda 和 list 結合使用
這個場景在面試中經常被問到,如下所示:
li = [lambda :x for x in range(10)]
得到一個 lambda 的list,看一看 li :
[<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>,
<function main.<listcomp>.<lambda>>]
打印 li[0]() 會得到什麽,註意這種調用方法,因為是數組,先拿第一個元素,li[0],後面的括號表示調用lambda表達式。打印的結果為 0 嗎? NO!是 9
lambda表達式不會形成對函數體內變量的記憶,只記錄最後一個狀態。 那麽如果lambda的入參中帶有x, 會得到我們想要的結果0 嗎?
li = [lambda x :x for x in range(10)]
res = li0
print(res)
輸出:0
因此,需要註意區分這兩種寫法的不同,記得這個區別,在一次新浪面試中,曾經被問到。希望對大家有用。
【速學速記】lambda表達式的兩種應用場景「面試用到」