[Python] Lambda 表达式

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值