[Python] Lambda 表达式

来源:互联网 发布:岑春煊 知乎 编辑:程序博客网 时间:2024/06/01 21:16

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


0 0
原创粉丝点击