分享

lambda的一些用法

 Tech-d 2013-08-14

lambda的用途:

1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

3. 使用lambda在某些时候让代码更容易理解。

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象,见证一下:

= lambda x : x**2
print g

<function <lambda> at 0x00AFAAF0>

Python中,有几个定义好的全局函数方便使用的,他们就是filtermapreduce。

>>> foo = [218922172481227]
>>>
>>> print filter(lambda x: x % 3 == 0, foo)
[
189241227]
>>>
>>> print map(lambda x: x * 2 + 10, foo)
[
144628544458263464]
>>>
>>> print reduce(lambda x, y: x + y, foo)
139

map一句可以写为:

print [x * 2 + 10 for x in foo]

非常的简洁,易懂。filter的例子可以写成:

print [x for x in foo if x % 3 == 0]


使用lambda的时候,需要注意作用域的问题。如想创建一个函数数组fs=[f0,...,f9] where fi(n)=i+n, 若写成:

fs = [(lambda n: i + n) for i in range(10)]

但是,奇怪的是,

>>> fs[3](4) //n=4时,数组元素fs[3]的值,注意不是fs(4)[3]
13
>>> fs[4](4)
13
>>> fs[5](4)
13

没有达到预期的原因是lambda中的i使用的是匿名函数外的全局变量。修改一下:

fs = [(lambda n, i=i : i + n) for i in range(10)]
>>> fs[3](4) //n=4时,数组元素fs[3]的值,注意不是fs(4)[3]
7
>>> fs[4](4)
8
>>> fs[5](4)
9



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多