Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction)。
一、lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:
def
f(x):
return
x
*
*
2
print
f(
4
)
Python中使用lambda的话,写成这样
g
=
lambda
x : x
*
*
2
print
g(
4
)
二、lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。
其实说的没错,lambda在Python这种动态的语言中确实没有起到什么惊天动地的作用,因为有很多别的方法能够代替lambda。
1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。
lambda基础
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象:
lambda函数一般遍历的时候是和三个函数一起嵌套使用map(),reduc()以及filter()函数
>>> foo
=
[
2
,
18
,
9
,
22
,
17
,
24
,
8
,
12
,
27
]
>>>
print
filter
(
lambda
x: x
%
3
=
=
0
, foo)
[
18
,
9
,
24
,
12
,
27
]
Python中的filter( )函数接受一个列表参数和一个lambda函数参数。
>>>
print
map
(
lambda
x: x
*
2
+
10
, foo)
[
14
,
46
,
28
,
54
,
44
,
58
,
26
,
34
,
64
]
传入map()函数的迭代器可以是字典,列表等。map()函数主要是根据lambda函数定义的逻辑来将输入迭代器中的每一项映射到输出迭代器中的相关项。
>>>
print
reduce
(
lambda
x, y: x
+
y, foo)
139
在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
defaultdict是字典类型,可以为defaultdict设置默认值,可以通过lambda设置默认值。
下面举几个例子:
from
collections
import
*
x
=
defaultdict(
lambda
:
0
)
/
/
默认值是
0
print
x[
0
]
y
=
defaultdict(
lambda
:defaultdict(
lambda
:
0
))
/
/
默认值是一个字典,字典的默认值是
0
print
y[
0
]
z
=
defaultdict(
lambda
:[
0
,
0
,
0
])
/
/
默认值是一个列表,[
0
,
0
,
0
].
print
z[
0
]
输出结果:
0
defaultdict(<function <
lambda
> at0x7f097797af50>, {})
[
0
,
0
,
0
]
注意:在Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在放置在functools 模块里,如果想要使用它,则需要通过引入functools 模块来调用reduce() 函数