python lambda函数
一. lambda函数介绍
python中,lambda函数也叫做匿名函数,及即没有具体名称的函数,它允许快速定义单行函数。
lambda与def的区别:
1.def创建的方法是有名称的,而lambda没有。
2.lambda会返回一个函数对象,但这个对象不会赋予一个标识符,而def则会把函数对象赋值给一个变量(函数名)。
3.lambda只是一个表达式,而def则是一个语句。
4.lamdba表达式“:”后面只能跟一个表达式,def则可以有多个。
5.像if或for或print等语句不能用于lambda中,def可以。
6.lambda一般用来定义简单的函数,而def可以定义复杂的函数。
7.lambda函数不能共享给别的程序调用,def可以
语法: lambda [arg1, [, arg2,……argn]] : expression
先看个简单的lambda函数
>>> lambda x,y: x+y <function <lambda> at 0x101d22ea0>
#x,y是函数的两个参数,x+y是函数的返回值,一看就知道是求两个数的和,但是函数没有名称如何调用呢?这里我们暂且给函数定义一个函数名,这样调用匿名函数就成为可能
>>> add = lambda x,y: x+y >>> add(1,2) 3
它等同与常规函数:
>>> add <function add at 0x101d22ea0> >>> add(1,2) 3
但是如果定义匿名函数,还给它一个名字的话,这就毫无意义了,所以这样并不是lambda的使用场景。
二. lambda使用场景
1. 函数式编程
map,filter,reduce这几个内置函数都接收函数作为参数,lambda就可以配合这些函数用于函数式编程中。
lst = [1,2,3,4,5,6,7,8,9,10] print(list(map(lambda x:x*10, lst)))
运行结果:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
2.闭包
先看一个普通的闭包
def outer(x): def inner(y): return x+y return inner a = outer(5) b = a(5) print(b)
使用lambda的闭包
def outer(x): return lambda y:x+y a = outer(5) b = a(5) print(b)
两种形式得到的结果是一样的,所以lambda函数是在我们编程过程中,可以使代码看起来更简洁,部分只需要执行一次的函数就可以考虑定义为lambda,我们使用lambda旨在于是代码更简洁,
如果你写出了让人难以一眼看清逻辑的lambda函数,那你就要考虑用常规的方式来定义函数了。