什么是lambda
python中的关键字lambda是定义匿名函数用的,返回的是函数类型(一个新函数)
问题一:何为匿名函数?
匿名函数就是不需要函数名的函数
问题二:匿名函数和def函数体有什么区别?
def创建的方法是有具体函数名称的,匿名函数没有具体的函数名称,详见后文
问题三:lambda表达式的优点
既然是表达式,那就是只有一行的函数,因此代码更加简洁。尤其当函数作为参数的时候,lambda非常有用,很简洁
lambda的形式
在lambda语句中,冒号前是函数参数,可以有多个,用逗号隔开,如果没有则省略。冒号右边是返回值,lambda语句构建的是一个函数对象,如果将这个函数对象保存在变量中,再次使用变量时,使用这个引用变量就相当于使用函数对象,可以供其他函数调用,例如可以直接func(x)这样使用
1 | func = lambda x : x*x #lambda表达式 |
lambda的应用
filter函数
用法:filter(None或者lambda表达式,变量)
作用:将可迭代的数据中经过条件筛选出结果为1或者结果为true的数据,结合lambda使用非常方便.
filter的第一个参数为None时,就会获取到原来的序列,记住不是省略,而是None
1 | #筛选出1-10之间的奇数 |
map函数
用法:map(lambda表达式,要操作序列)
作用:遍历序列,对序列中的每个元素进行操作,最终获得新的序列
1 | list = [1,2,3] |
reduce
用法:reduce(lambda表达式,要循环的队列,初始值),函数必须要有两个参数
作用:对序列内所有的元素进行累计操作
1 | list = [1,2,3] |
4 不使用lambda的情况
lambda其实只是一个表达式,所以他能够取代的函数逻辑有限。
如果一个列表生成式仅使用for,if ,in就能实现,那就不需要使用lambda
如果函数逻辑十分复杂,那么就会定义函数,让代码更具有可读性,也不需要使用lambda
当你只需要一个简单的单行函数做一件简单的事情,甚至有时我们连函数的名字都不需要知道,那么此时的lambda就是一个不错的选择,毕竟不用冥思苦想函数名称用啥了,也不用担心命名冲突。