python 匿名函數

lambda

lambda最開始接觸的時候是在.net開發的時候,感受簡化了不少的工做裏面繁瑣,總感受lambda相似於c的宏定義,只是功能更增強大。python

lambda 參數列表:表達式

下面的代碼的做用是對兩個數進行相加,經過下面的片斷咱們能夠發現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]

Filtering 函數

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)
相關文章
相關標籤/搜索