python中的lambda表达

C++中的lambda表达式与C++11加入标准库,是一个简短的匿名的可调用对象,编译器会将其转化为一个匿名类的对象。lambda表达式的最大特点就是简短灵活,调用方便。它不需要处理很复杂的逻辑,通常只包含一两句简短的代码。

python作为一种优雅简洁的脚本语言自然不会错过这种机制。python中的lambda表达式形式如下:

lambda 参数列表 : 表达式

如果没有需要传递的参数,参数类表可以为空了,但表达式部分不能为空,因为lambda表达式必须有返回值。

lambda表达式会返回一个值,这个值可以是一个计算结果,也可以是一个新的lambda表达式

返回一个值:

>>> f = lambda x,y : x+y //创建一个lambda表达式
>>> print f(1, 2)        //调用lambda表达式
3
返回一个新的lambda表达式:

>>> f = lambda x : lambda y : x+y  //嵌套的lambda表达式
>>> a = f(1)                       //f(1)返回一个lambda表达式
>>> b = a(10)
>>> print b
11


下面看看经常与lambda表达式一起使用的三个python内建函数:filter,map,reduce

1、filter(bool_func,seq):遍历列表seq中的每个元素,传入返回值为bool类型的函数bool_func中,从列表中过滤出函数返回值为true的元素,得到一个新的列表

<span style="font-size:10px;">>>> filter(lambda x : x > 3, [1, 2, 3, 4, 5])
[4, 5]</span>
2、map(func,seq1[,seq2...]):将列表通过func函数映射为一个新的列表
>>> map(lambda x : x*2, [1, 2, [3, 4]])
[2, 4, [3, 4, 3, 4]]

3、reduce(func,seq[,init]):这里的func函数接受两个参数,reduce依次从seq中取一个元素传入func函数,另一个参数是上一次func函数的返回值。第三个参数为可选参数,如果指定了init,则开始时将init和seq中的第一个元素传给func;如果没有指定,则开始时取seq的头两个元素给func。

<span style="font-size:10px;">>>> reduce(lambda x,y : x + y,[1,2,3,4])  
10  
>>> reduce(lambda x,y : x + y,[1,2,3,4],10)  
20  </span>




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。