一、认识lambda
- lambda是一个表达式,而不是一个语句。
- lambda的主体是一个单个表达式,而不是一个代码块。
lambda的使用方法是lambda表达式,即lambda argument_list: expression;其中lambda是关键词;argument_list是参数列表,lambda允许接收多个参数;expression是表达式,用来对参数进行计算返回的。而且这个表达式只能是一句,并不能扩展成一个多行的代码块。这意味着lambda中不会含有if... elif... else 或者 try... except等语句。argument_list:与expression中间由冒号(:)连接。
y = lambda x: x == 0
# 这个lambda相当于这个函数
def is_none(x):
return x == 0
print(y(2))
print(is_none(2))
print(y(0))
print(is_none(0))
# 这里是结果
False
False
True
True
lambda与普通函数def的联系:lambda可以看做是简单的def,这个def有多简单呢?-----没有函数名,函数体只有一个return。
lambda的作用是创建一个匿名函数。这个函数默认只能用一次(因为他是匿名的呀,没有函数名的),但是我们可以把这个表达式赋值给一个变量,然后我们通过这个变量就能实现多次调用了。
y = lambda x: x > 3
print(y)
print(y(2))
# 这里是结果
<function <lambda> at 0x00000000020C2EA0>
False
lambda优点:
1、使用lambda可以省去定义函数的过程,让代码更加精简。
2、对于一些简单的,服用次数很少的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3、使用lambda在某些时候让代码更容易理解。因为函数体就在眼前,不需要再寻找函数的定义位置读函数。
lambda缺点:只能进行简单的任务。
二、经常与lambda一起玩的几个高级函数
1、map(function, iterable, ...)-------根据提供的函数对指定序列做映射。内置函数。Python2版本返回一个新列表,Python3.x版本返回一个迭代器
推荐一个网址,这个网址是一个map动画,可以更清楚map的工作流程:https://lambdabricks.github.io/animating-hofs/
iterable------一个或多个可迭代序列。
function------操作函数,用来对iterable里的每一个元素进行处理。
def Addtwo(x, y):
return x + y
y = map(Addtwo, [1, 2, 3, 4], [10, 20, 30, 40])
print(y)
for i in y:
print(i, end=',')
# 这里是结果
<map object at 0x00000000025AAA20>
11,22,33,44,
# 如果不定义函数,而是用lambda,结果也是一样的
yl = map(lambda x, y: x + y, [1, 2, 3, 4], [10, 20, 30, 40])
print(yl)
for i in yl:
print(i, end=',')
# 这里是结果
<map object at 0x00000000028AAA20>
11,22,33,44,
2、reduce(function, iterable[, initializer])-------对于序列内所有元素进行累计操作。需要导入functools模块
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
function-----操作函数,有两个参数,对iterable里的元素进行操作。
iterable------tuple ,list ,dictionary, string等可迭代物,必需参数
initializer----初始值, 可选参数,若存在,则function第一次操作就不是iterable的第1、2个元素,而是initializer和第1个元素。
from functools import reduce
def Addtwo(x, y):
return x + y
print(reduce(Addtwo, [1, 2, 3, 4, 5], 100))
# 这里是结果
115
# 如果用lambda表达式
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))
# 这里是结果
15
3、filter(function, iterable)------对于序列中的元素进行筛选,最终获取符合条件的序列。内置函数。Python2版本返回一个新列表,Python3.x版本返回一个迭代器
function-----判断函数
iterable------可迭代序列
from functools import reduce
def is_odd(n):
return n % 2 == 1
result1 = filter(is_odd, [1, 2, 3, 4, 5])
print(result1)
for i in result1:
print(i, end=',')
# 这里是结果
<filter object at 0x00000000028ADCF8>
1,3,5,
result2 = filter(lambda n: n % 2 == 1, [1, 2, 3, 4, 5])
print(result2)
for i in result2:
print(i, end=',')
# 这里是结果
<filter object at 0x00000000028B60F0>
1,3,5,