lambda只是一個表達式,函數體比def簡單很多,很多時候定義def,然后寫一個函數太麻煩,這時候就可以用lambda定義一個匿名函數。
lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
lambda表達式是起到一個函數速寫的作用。允許在代碼內嵌入一個函數的定義。
1 list(filter(lambda x:True if x % 3 == 0 else False, range(100)))
如上所示,使用lambda表達式定義了一個匿名函數,用於篩選100以內的3的倍數,並生成一個列表。
def make_repeat(n): return lambda s : s * n
當然lambda也可以嵌套在一個函數內使用,如上,函數中嵌套了一個lambda表達式。
double = make_repeat(2) double <function make_repeat.<locals>.<lambda> at 0x0000000003A01D90>
然后,要使用的時候可以用一個變量來接收,顯示double變量,double變量是一個函數,並且需要一個參數,參見lambda表達式,需要一個s參數。
print(double(8)) 16
最后,調用double變量,並且傳入參數 8 ,得到返回值16。因為前面傳入的n的值為 2 ,故 2 * 8 得到16。
內置BIF介紹:
filter():簡單的理解為過濾器,需要兩個參數,function,和一個序列(字符串、列表、元組都是序列),過濾器會依次將序列的值傳入function中,
如果返回True的話,將其重新生成一個列表返回。
1 list(filter(lambda x:True if x % 3 == 0 else False, range(100))) 2 [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
zip():字面意思理解,就是zip打包,可以將多個序列進行打包,它會將序列拆分,然后把第一個序列和第二個序列的元素依次組成元組,2個一組組合成列表。
不過要注意的是,這是以最短序列來組合的,就是說如果一個序列比較長,一個比較短的話,組合只會進行到斷序列的最后一個元素,多余的部分會被拋棄。
1 >>> str1 = "abcde"
2 >>> str2 = "abcdefg"
3 >>> list(zip(str1, str2)) 4 [('a', 'a'), ('b', 'b'), ('c', 'c'), ('d', 'd'), ('e', 'e')]
map():映射,用法和filter()類似,也是將序列放入函數進行運算,但是,不論運算結果為什么,map()都將忠實反饋,這是map()和filter()的主要區別。請注意,filter()和map()中的function都必要有一個返回值。
1 >>> list(map(lambda x:True if x % 3 == 0 else False, range(100))) 2 [True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True]