继续按照上文的网址学习函数对象
1.lambda
>>> func = lambda x,y: x + y
>>> print func(3,4)
7
==>
def func(x, y):
return x + y
2. 函数可以作为参数传递
>>> def test(f, a, b):
... print "test"
... print f(a, b)
...
>>> test(func, 3, 5)
test
8
>>>
提高函数灵活性
test((lambda x,y: x**2 + y), 6, 9)
3.
map()是Python的内置函数,它的第一个参数是一个函数对象。
>>> re = map((lambda x: x + 3), [1,3,5,6])
>>> print re
[4, 6, 8, 9]
(注意,在Python 3.X中,map()将每次作用结果yield出来,形成一个循环对象。可以利用list()函数,将该循环对象转换成表)
>>> re = map((lambda x,y: x + y), [1,3,5,7], [2,4,6,7])
>>> print re
[3, 7, 11, 14]
(本小节所使用的lambda也完全可以是def定义的更复杂的函数)
4. filter函数
filter函数与map函数类似,也是将作为参数的函数对象作用于表的各个元素。如果函数对象返回的是True,则该次的元素被储存于返回的表中。filter通过读入的函数来筛选数据。(同样,在Python 3.X中,filter返回的不是表,而是循环对象。)
>>> def func(a):
... if a > 100:
... return True
... else:
... return False
...
>>> filter(func,[10,56,101,500])
[101, 500]
5. reduce函数
reduce函数的第一个参数也是函数,但有一个要求,就是这个函数自身能接收两个参数。reduce可以累进地将函数作用于各个参数。如下例:
print reduce((lambda x,y: x+y),[1,2,5,7,9])
reduce的第一个参数是lambda函数,它接收两个参数x,y, 返回x+y。
reduce将表中的前两个元素(1和2)传递给lambda函数,得到3。该返回值(3)将作为lambda函数的第一个参数,而表中的下一个元素(5)作为lambda函数的第二个参数,进行下一次的对lambda函数的调用,得到8。依次调用lambda函数,每次lambda函数的第一个参数是上一次运算结果,而第二个参数为表中的下一个元素,直到表中没有剩余元素。
上面例子,相当于(((1+2)+5)+7)+9
(根据mmufhy的提醒: reduce()函数在3.0里面不能直接用的,它被定义在了functools包里面,需要引入包,见评论区)
>>> reduce((lambda x, y: x + y), [1,2,3,4,5])