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联合使用实现累加的功能