1、 lambda匿名函数的基本介绍
匿名函数的结构如下:
lambda arg1, arg2,... argN : expression
即:匿名函数的关键字是 lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式.
例如:
f=lambda x: x + 1
这个匿名函数有一个参数x,表达式是x+1。
我们可以这么调用:
print(f(3))
结果为:
<class 'function'>
4
所以,我们看到,匿名函数lambda和常规函数一样,返回的都是一个函数对象(function object),并且用户也几乎一样。但是它和常规函数还是有区别的:
1、lambda是一个表达式(expression),并不是一个语句。这里要说一下两者的区别,所谓表达式,就好比数学上的公式,比如x-1,x+1等;而语句,则是为了完成某些功能,比如赋值语句x=1完成了赋值;所以,lambda函数可以用在一些常规函数def不能用的地方,比如列表内部
l_4= [(lambda x: x+1)(x) for x in range(10)]
print(l_4)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2、lambda匿名函数的主体只有一行简单表达式,并不能扩展成一个多行的代码块。这也就是说,lambda匿名函数主要是处理简单任务。
严格来说,python中的匿名函数都可以被替换成等价的其他形式,比如常规函数,所以在python程序中,匿名函数并不是必须的,但是匿名函数在一定情况下是可以简化代码的。
2、 lambda匿名函数的简单应用
2.1 map函数
map(function, iterable) 函数,表示,对 iterable 中的每个元素,都运用 function 这个函数,最后返回一个新的可遍历的对象。
比如:
l_1 = [1, 2, 3]
l_2 = map(lambda x: x + 1, l_1)
print(type(l_2))
for i in l_2:
print(i)
输出:
<class 'map'>
2
3
4
这里我们鼓励使用map函数,因为 map() 函数直接由 C 语言写的,运行时不需要通过 Python 解释器间接调用,并且内部做了诸多优化,所以运行速度最快。
2.2 filter函数
filter(function, iterable) 函数,它和上面说的map 函数类似,function 同样表示一个函数对象。filter() 函数表示对 iterable 中的每个元素,都使用 function 判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合。
例如:
l_1 = [1, 2, 3]
print(type(l_3))
for i in l_3:
print(i)
输出:
<class 'filter'>
3
2.3 reduce函数
reduce(function, iterable) 函数,主要用来对一个集合做一些累积操作。主要要使用reduce函数,需要做import引入。
例如:
from functools import reduce
l_1 = [1, 2, 3]
s = reduce(lambda x, y: x + y, l_1)
print(type(s))
输出:
<class 'int'>
6
这里返回了这个列表累积的结果。