lambda表达式可以理解为一种抽象的函数实现方法,这种方式只有最基本的三个步骤:给与参数,表达式实现,返回结果。这种方式非常干净,减少了内存的使用,整个程序少了函数的污染,代码格式也会更为简练。但在python中的使用是受限的,只能进行简单的表达式计算。
下面简单给一个知乎扒的代码示范一下:
func = (lambda x:x**i for i in xrange(4)) for i in func: i(4) 1 4 16 64
上面代码的含义很简单,for i in xrange(4)会返回一个列表[0,1,2,3],而func对象实际上是一个迭代器iterator,对其遍历之后就会返回这样一个结果:
(lambda x:x**0) (lambda x:x**1) (lambda x:x**2) (lambda x:x**3)
然后在进行lambda表达式的计算。
也就是说:
i(0) = (lambda x:x**0) i(1) = (lambda x:x**1) i(2) = (lambda x:x**2) i(3) = (lambda x:x**3)
最后自然就会返回1,4,16,64这样一个结果。
再举一个map,filter函数与lambda函数结合使用的例子:
>>> l = ['foo', 'bar', 'far']
>>> map(lambda x: x, l)
['foo', 'bar', 'far']
>>> filter(lambda x: 'f' in x, l)
['foo', 'far']
>>> map(lambda x: x.upper(), filter(lambda x: 'f' in x, l))
['FOO', 'FAR']
map(a,b)会在a,b之间建立一个映射关系,将a实际上是b中一个元素,lambda函数会以a为参数进行表达式运算,之后再返回结果。
同理filter也是如此,只不过filter只会返回lambda函数返回值为真的元素。