一、匿名函数介绍
在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数。
lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值,lambda函数是一个函数对象,直接赋值给一个变量,这个变量就成了一个函数对象。
语法:lambda 参数:表达式
先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。
使用lambda函数可以省去函数的定义,不需要声明一个函数然后使用,而可以在写函数的同时直接使用函数。
使用场景:
1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)
2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
3.与一些Python的内置函数配合使用,提高代码的可读性
二、匿名函数与普通函数的对比
可以看到,lambda适用于多个参数、一个返回值的情况,可以用一个变量来接收,变量是一个函数对象,执行这个函数对象的结果与执行一个普通函数的结果一样。
lambda函数比普通函数更简洁,且没有声明函数名,上面的代码是用一个变量来接收lambda函数返回的函数对象,并不是lambda函数的名字。
三、匿名函数的多种形式
可以看到,lambda的参数可以0个到多个,并且返回的表达式可以是一个复杂的表达式,只要值是一个值就行了。
四、lambda作为一个参数传递
上面的代码中,sub中需要传入一个函数,然后这个函数在sub里面执行,这时候我们就可以使用lambda函数,因为lambda就是一个函数对象。
五、lambda作为函数的返回值
匿名函数可以作为一个函数的返回值,在上面的代码中,run返回的是一个匿名函数,返回的是一个函数对象,当我们执行这个函数时,可以得到lambda函数的结果。
注意:其中的a,b两个参数是run中的参数,但我们执行返回的函数run_a时,已经不在run的作用域内了,而lambda函数仍然能使用a,b参数。说明lambda函数会将它的运行环境保存一份,一直保留到它自己执行的时候使用。