您的位置:首页 > 编程语言 > Python开发

Python 函数式编程之lambda

2014-08-06 13:47 323 查看
Python 是门多范式的编程语言,它支持函数式编程(只支持部分,不是完全的支持),其中的lambda 匿名函数就是借鉴了Lisp。

1. 什么是匿名函数?

所谓匿名函数,从功能上讲相当于一个函数,但本质上是个表达式,它返回一个函数对象。那为什么我们还需要匿名函数呢?答案是,如果一个函数功能相对较简单时,使用匿名函数替代让代码显得更简洁,也就是更Pythonic!

先来看看使用自定义函数和使用lambda 匿名函数的各自实现:

#自定义函数
>>> def add(x, y):
return x+y
>>> add(2, 3)
5

#使用lambda
>>> a = lambda x, y: x+y
>>> a(2, 3)
5


使用lambda构建的表达式,返回的对象是函数,所以,需要赋给一个对象,然后再调用这个函数。当然,也可以直接采用下面这种方式直接调用:

>>> (lambda x, y: x+y) (2, 3)  # 实时定义并调用
5


2. lambda 的格式和应用

格式:lambda [参数]: 表达式

lambda 中的参数与函数的参数相对应,表达式也函数中的语句相对应。实际上,lambda 常常与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]

如上面所说,使用lambda 只是为了让代码更简洁易懂的情况下才使用,如果一味的使得lambda 而让代码可读性变差,是不可取的,比如用以下方式来打印九九口诀表:
print '\n '.join(map(lambda x: ' '.join(map(lambda y: "%s x %s = %s " % (x, y, x * y), range(1,10))), range(1,10)))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数式编程 lambda