lambda的用途: 1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。 2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。 3. 使用lambda在某些时候让代码更容易理解。 lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象,见证一下: g = lambda x : x**2 print g <function <lambda> at 0x00AFAAF0> Python中,有几个定义好的全局函数方便使用的,他们就是filter, map, reduce。 >>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27] >>> >>> print filter(lambda x: x % 3 == 0, foo) [18, 9, 24, 12, 27] >>> >>> print map(lambda x: x * 2 + 10, foo) [14, 46, 28, 54, 44, 58, 26, 34, 64] >>> >>> 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 |
|