适当的使用在Python里的4个内置函数lambda, map, reduce, filter可以使程序变得非常简单易读
lambda运算符
函数形式:
1 | lambda argument_list: expression |
用lambda开头,然后加上所有需要在函数中使用的元素,中间用逗号隔开。元素后面加冒号,冒号后面加上函数体。
1 | sum = lambda x, y : x + y |
7
map()函数
如果把map和lambda结合使用在一起,可以使函数的定义变得更加方便。
函数形式如下:
1 | r = map(func, seq) |
简单来讲,map函数就是把定义的函数func运用到seq里的每一个元素上。Python2里的map函数直接返回一个list,Python3里的map函数返回一个迭代器,所以如果想要一个数列,要用list()转换迭代器结果。
1 | # 摄氏度变华氏度 |
[102.56, 97.7, 99.14, 100.4, 100.03999999999999]
map()函数可以应用到多于一个列表上。每个列表的长度必须一样才能应用到map()函数里,过程是先把函数应用到每个列表的第一个元素上,然后每个列表的第二个元素上,以此类推。
1 | a = [1,2,3,4] |
[18, 14, 14, 14]
filter()函数
filter()函数提供了一种可以方便过滤掉一个数列中不需要的元素的形式。其中的function是一个描述过滤条件的函数,返回值是true或false。过程也是把function函数应用到sequence里的每一个元素上,如果function函数返回true,则这个元素会被去掉。
函数形式如下:
1 | filter(function, sequence) |
1 | fibonacci = [0,1,1,2,3,5,8,13,21,34,55] |
[1, 1, 3, 5, 13, 21, 55]
reduce()函数
正如它的名字,reduce函数将减少数列中的元素个数。func是有两个输入,返回一个值得函数。
函数形式如下:
1 | reduce(func, seq) |
如果seq= [ s1, s2, s3, ... , sn ],使用reduce(func, seq)过程如下:
- 第一步先将func运用到数列里前两个元素上[ func(s1, s2), s3, ... , sn ]
- 第二步将func运用到第一步的结果和数列里前三个元素上[func(func(s1, s2),s3), ... , sn ]
- 以此类推,直到最后只输出一个元素
1 | import functools |
113
另外一个例子
1 | from functools import reduce |
102
参考文献
[1]. Python 3 Tutorial https://www.python-course.eu/python3_lambda.php