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