lambda最開始接觸的時候是在.net開發的時候,感受簡化了不少的工做裏面繁瑣,總感受lambda相似於c的宏定義,只是功能更增強大。python
下面的代碼的做用是對兩個數進行相加,經過下面的片斷咱們能夠發現lambda函數的參數列表在左側而且採用逗號進行分隔函數
sum=lambda x,y,z:x+y+z print(sum(1,2,3))#返回6
下面的代碼段就是不用匿名函數時的傳統方式學習
def sum(x,y,z): return x+y+z print(sum(1,2,3))
###有關map()函數 map()有兩個函數.net
r = map(func, seq)code
func:是一個函數的名稱 seq:是一個(如列表)序列 map函數將將seq中的每個對象進行迭代進行調用 func函數而且返回結果值 下面的代碼段是將一個列表裏面的全部的值乘以平方對象
def square(T): return T*T temperatures = (1, 2, 3, 4, 5) temperatures_in_Fahrenheit = list(map(square, temperatures)) print(temperatures_in_Fahrenheit) #返回的值[1, 4, 9, 16, 25]
下面咱們用匿名方法來重寫上面的功能ip
temperatures = (1, 2, 3, 4, 5) temperatures_in_Fahrenheit = list(map(lambda T:T*T, temperatures)) print(temperatures_in_Fahrenheit) #返回的值[1, 4, 9, 16, 25]
map能夠對不一樣的列表進行計算,可是列表的長度必須一致ci
a=[1,2,3,4] b=[17,12,11,10] c=[-1,-2,-3,-4] print(list(map(lambda x,y:x+y,a,b)))#[18, 14, 14, 14] print(list(map(lambda x,y,z:x+y+z,a,b,c)))#[17, 12, 11, 10] print(list(map(lambda x,y,z : 2.5*x + 2*y - z, a,b,c)))#[37.5, 31.0, 32.5, 34.0]
filter(function, sequence)開發
filter和map的函數一致,可是filter的功能是過濾掉sequence的列表中不符合function的對象it
fibonacci = [0,1,1,2,3,5,8,13,21,34,55] odd_number=list(filter(lambda x:x%2,fibonacci)) print(odd_number)#[1, 1, 3, 5, 13, 21, 55] even_numbers = list(filter(lambda x: x % 2 == 0, fibonacci)) print(even_numbers)#[0, 2, 8, 34]
下面的是一個常規的書店的購物車列表
訂單號 | 書名和做者 | 數量 | 單價 |
---|---|---|---|
34587 | C++ Primer,Stanley B. Lippman | 2 | 85.8 |
2323 | Visual C++ 入門,明日科技 | 4 | 88.8 |
2321 | python 學習,嶽恩 | 55 | 85 |
1.寫一個程序,假若該訂單的單價乘以總價沒有大於100元的話就加上10元的運費
orders = [ ["34587","C++ Primer,Stanley B. Lippman", 2, 40.95], ["2323","PVisual C++ 入門,明日科技", 4, 88.80], ["2321","python 學習,嶽恩",55,85]] min_order = 100 invoice_totals=list(map(lambda x:x if x[1]>=min_order else (x[0],x[1]+10), map(lambda x:(x[0],x[2]*x[3]),orders))) print(invoice_totals)