Python版本:Python 2.7.13rc1
1.普通函数和lambda表达式的区别
>>> def f(x):return x**2
>>> print f(8)
64
>>> g = lambda x:x**2
>>> print g(8)
64
Note:可以看出,f()和g做了同样一件事情,求一个数的平方值,但是要注意的是lambda定义并不包括“return”语句。还有一件要注意的事情是,lambda表达式可以放在一个函数的任意一个地方,而且根本不需要把它赋值给一个变量。
2.嵌套作用域
>>> def make_incrementor(n):
return lambda x: x + n
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
以上这段代码定义了一个make_incrementor(n)的匿名函数,这个函数返回一个lambda表达式”lambda x: x + n“,其中“n”是一个增量值。
当“n”被赋予值42时,”f = make_incrementor(42)“ 就相当于”f = lambda x: x+42“。
再举一个例子,可以很清楚看明白:
>>> def make_incrementor(n):
return lambda x: x + n
>>> f = make_incrementor(2)
>>> g = make_incrementor(6)
>>> print f(42),g(42)
44 48
更进一步来看:
>>> foo = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print filter(lambda x: x % 3 == 0, foo)
[3, 6, 9]
上面这个例子中,filter()为foo list中每一个元素调用了lambda的表达式,并且返回一个由能被3整除的新的list。
同样的可以调用map()和reduce():
>>> print map(lambda x: x % 3 == 0, foo)
[False, False, True, False, False, True, False, False, True]
>>> print map(lambda x: x * 2 + 10, foo)
[12, 14, 16, 18, 20, 22, 24, 26, 28]
>>> print reduce(lambda x, y: x + y, foo)
45
注意:在上面这段代码中,map()对每一个元素进行转换,reduce()做了一个sum()的作用,但是sum()的效率更高。
3.将lambda表达式作为参数
>>> def apply(f,n):
print(f(n))
>>> square = lambda x:x**2
>>> cube = lambda x:x**3
>>> apply(square,4)
16
>>> apply(cube,3)
27
上面这段代码,将square和cube两个lambda表达式作为argument传给函数apply(f,n)。
4.嵌套lambda表达式
>>> incre_two = lambda x: x+2
>>> multiply_incre_two = lambda x: incre_two(x*2)
>>> print multiply_incre_two(2)
6
上面这段代码可以解读为:x * 2 + 2