python lambda表達式


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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM