学习python(五)

继续按照上文的网址学习函数对象

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])


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值