python之lambda表达式

什么是lambda

python中的关键字lambda是定义匿名函数用的,返回的是函数类型(一个新函数)

问题一:何为匿名函数?
匿名函数就是不需要函数名的函数
问题二:匿名函数和def函数体有什么区别?
def创建的方法是有具体函数名称的,匿名函数没有具体的函数名称,详见后文
问题三:lambda表达式的优点
既然是表达式,那就是只有一行的函数,因此代码更加简洁。尤其当函数作为参数的时候,lambda非常有用,很简洁

lambda的形式

在lambda语句中,冒号前是函数参数,可以有多个,用逗号隔开,如果没有则省略。冒号右边是返回值,lambda语句构建的是一个函数对象,如果将这个函数对象保存在变量中,再次使用变量时,使用这个引用变量就相当于使用函数对象,可以供其他函数调用,例如可以直接func(x)这样使用

1
2
3
4
func = lambda x : x*x    #lambda表达式

def func(x): #普通函数
return x*x

lambda的应用

filter函数

用法:filter(None或者lambda表达式,变量)
作用:将可迭代的数据中经过条件筛选出结果为1或者结果为true的数据,结合lambda使用非常方便.
filter的第一个参数为None时,就会获取到原来的序列,记住不是省略,而是None

1
2
3
4
#筛选出1-10之间的奇数
mylist = list(filter(lambda x : x%2, range(0,10)))

[1, 3, 5, 7, 9]
map函数

用法:map(lambda表达式,要操作序列)
作用:遍历序列,对序列中的每个元素进行操作,最终获得新的序列

1
2
list = [1,2,3]
new_list = map(lambda x : x+10, list)
reduce

用法:reduce(lambda表达式,要循环的队列,初始值),函数必须要有两个参数
作用:对序列内所有的元素进行累计操作

1
2
list = [1,2,3]
result = reduce(lambda x,y : x+y,list)

4 不使用lambda的情况
lambda其实只是一个表达式,所以他能够取代的函数逻辑有限。
如果一个列表生成式仅使用for,if ,in就能实现,那就不需要使用lambda
如果函数逻辑十分复杂,那么就会定义函数,让代码更具有可读性,也不需要使用lambda

当你只需要一个简单的单行函数做一件简单的事情,甚至有时我们连函数的名字都不需要知道,那么此时的lambda就是一个不错的选择,毕竟不用冥思苦想函数名称用啥了,也不用担心命名冲突。

休息一下,喝杯咖啡,继续创作