1.背景python
python中函數應用一方面是將重複使用的代碼塊抽象爲一個函數從而下降代碼的冗餘度,即經過入參,返回值完成函數的調用並完成必定功能,另外一方面是將複雜的代碼塊使用函數來封裝,從而提升程序的可讀性。編程
評定代碼質量的一個指標就是clean code,隨着python語言的發展,發現函數經過使用def定義來實現,有些時候顯得費事,就出現了匿名函數即lambda的使用,普通函數是一種過程式編程,lambda則是一種函數式編程,那麼什麼是函數式編程,下面讓我婉婉道來:函數式編程
實現兩個數值之和的函數的方法:函數
1 #!/usr/bin/python 2 # encoding: utf-8 3 4 5 def sum(a,b): 6 c=a+b 7 return c 8 9 if __name__=="__main__": 10 print sum(2,4)
a=lambda x,y: x+y
print a(1,2) #使用匿名函數的實現方法
你以爲那種方法看起更專業?spa
可是展示匿名函數"神奇"的地方是結合filter,map和reduce的使用code
需求案例:blog
當你須要從一個列表裏面檢索出知足必定條件的元素utf-8
1 #!/usr/bin/python 2 # encoding: utf-8 3 4 5 if __name__=="__main__": 6 data=[1,2,4,67,85,34,45,100,456,34] 7 print filter(lambda x:x%3==0,data)
上面的例子就是找出這個列表中能被3整除的元素class
結果:匿名函數
[45, 456]
x 爲lambda函數的一個入參
:爲分隔符
x%3==0 爲lambda函數的返回值,同時做爲filter函數的入參,若是爲真就將該元素加入返回列表中
data就是傳入的源數據列表
匿名函數的調用
賦值給一個變量,而後如調用函數同樣調用就是了
1 #!/usr/bin/python 2 # encoding: utf-8 3 4 5 if __name__=="__main__": 6 c = lambda x,y=5: x+y 7 print c(2) 8 print c(2,4)
可以使用默認值,若是有傳入的參數值固然是要傳入的值了
輸出結果:
7
6
1 #!/usr/bin/python 2 # encoding: utf-8 3 4 5 if __name__=="__main__": 6 c = lambda *z:z 7 print c(2) 8 print c("ni","hao")
輸出結果:
(2,)
('ni', 'hao') # 以*z的形式傳入參數,返回結果是元組
#!/usr/bin/python # encoding: utf-8 if __name__=="__main__": data=[1,2,3,4,5,6,7,8,9,10] print reduce(lambda x,y:x+y,data)
上面的例子是lambda和reduce聯合使用實現累加的功能