在Python中,有几个特别的函数,它们常常被看做是Python能够进行所谓“函数式编程”的见证。它们是:filter、map、reduce、lambda、yield。有了它们,可以使得程序更简洁,没有它们,程序也可以以其他方式实现,只是有些麻烦罢了。
lambda
lambda函数,是一个一行就能解决问题的函数。
lambda arg1,arg2,...argN : expression using arguments
>>> g = lambda x,y:x*y
>>> g(10,3)
30
1、lambda后面直接跟变量
2、变量后面是冒号
3、冒号后面是表达式,表达式计算结果是本函数的返回值
虽然lambda函数可以接收任意多个参数(包括可选参数)并且返回单个表达式的值,但是lambda函数不能包含命令,包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果需要更复杂的东西,应该定义一个普通函数,然后要多长有多长。
map
map(function ,iterable,...)
说明:function是一个函数,iterable是一个序列对象
>>> items = [1,2,3,4,5]
>>> map(lambda x:x**2,items)
[1, 4, 9, 16, 25]
1、对于iterable中 的每个元素,依次应用function的方法(函数)这本质上就是一个for循环
2、将所有结果返回一个list
3、如果参数很多,则那些参与并执行function。
例如:
>>> items = [1,2,3,4,5]
>>> map(lambda x:x+1,items)
[2, 3, 4, 5, 6]
>>>
>>> lst1 = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,10]
>>> map(lambda x,y:x+y,lst1,lst2)
[7, 9, 11, 13, 15]
>>>
reduce
reduce(function, iterable[ initializer])
原理:
从以上图可以看出,是将序列中的元素想加。
>>> reduce(lambda x,y:x+y,[1,2,3,4,5])
15
有两个 list,a = [3,9,8,5,2],b=[1,4,9,2,6],计算:a[0]b[0]+a[1]b[1]+...的结果。
>>> a = [3,9,8,5,2]
>>> b = [1,4,9,2,6]
>>> reduce(lambda x,y:x+y,map(lambda x,y:x*y,a,b))
133
filter
filter(function, iterable)
filter 的中文含义是“过滤器”,在 Python 中,它就是起到了过滤器的作用。首先看官方说明:
>>> numbers = range(-5,5)
>>> numbers
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> filter(lambda x:x>0,numbers)
[1, 2, 3, 4]
>>> filter(lambda y:y!='u','wuxiaoxin')
'wxiaoxin'
以下等效:
>>> [x for x in numbers if x>0]
[1, 2, 3, 4]