lambda表达式在“:”后只能有一个表达式。也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数
Python虽然不是一种函数式编程语言,但仍然给予了函数式编程很大的重视。接下来的几篇文章我将记录一些Python函数式编程的知识,其中本文要说的是匿名函数lambda。
Python使用lambda关键字创造匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配。其语法是:lambda [arg1[, arg2, ... argN]]: expression
其中,参数是可选的,如果使用参数的话,参数通常也会在表达式之中出现。
下面举例来说明lambda语句的使用方法(无参数)。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 使用def定义函数的方法
def true():
return True
#等价的lambda表达式
>>> lambda :True
<function <lambda> at 0x0000000001E42518>
# 保留lambda对象到变量中,以便随时调用
>>> true = lambda :True
>>> true()
True
|
下面再举一个带参数的例子。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 使用def定义的函数
def add( x, y ):
return x + y
# 使用lambda的表达式
lambda x, y: x + y
# lambda也允许有默认值和使用变长参数
lambda x, y = 2: x + y
lambda *z: z
# 调用lambda函数
>>> a = lambda x, y: x + y
>>> a( 1, 3 )
4
>>> b = lambda x, y = 2: x + y
>>> b( 1 )
3
>>> b( 1, 3 )
4
>>> c = lambda *z: z
>>> c( 10, 'test')
(10, 'test')
|
是不是看起来代码更简洁,又不失可读性。