lambda x,y,.....,z:x+y
:左边是参数可以 是一个或多个, : 右面是返回的结果
原型
lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象。
如果没有参数,则lambda冒号前面就没有,如以上例子。
-
lambda 参数:操作(参数)
-
lambda [arg1[,arg2,arg3....argN]]:expression
二、lambda与命名函数的区别
python lambda它只是一个表达式,而def则是一个语句。
lambda表达式运行起来像一个函数,当被调用时创建一个框架对象。
因此语句嵌套用def,表达式嵌套用lambda。
自动返回结果
返回lambda表达式中最后一个表达式的值。
5、lambda可以直接作为python 列表或python 字典的成员
lambda一般用来定义简单的函数,而def可以定义复杂的函数。
8、不可重用
lambda函数不能共享给别的程序调用,def可以。
三、使用lambda的优缺点
lambda 表达式可以写出非常简练的代码,但是缺点也非常明显:难于理解,降低了可读性和性能。特别是对于 Python 新手。
优点:
1、对于单行函数,使用lambda可以省去定义函数的过程,让代码更加精简。
2、在非多次调用的函数的情况下,lambda表达式即用即得,提高性能。
注意:如果for..in..if(python中另外一个简单表达式)能做的,最好不要选择lambda。
3、 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
4、对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
5、使用lambda在某些时候让代码更容易理解。
6、代码简洁,不增加额外变量。
缺点:
1、对很多 Python 程序员来说, lambda 表达式是一种古怪而又陌生的语法。
2、lambda 函数本身缺少名称和文档, 意味着了解它们功能的唯一方式就是读代码,让代码变得更加晦涩。
3、lambda 表达式只能包含一条语句, 因此某些提高可读性的语言功能, 如元组拆包, 不能与它们一起使用。
4、lambda 函数通常可以被替换为标准库中已存在的函数或 Python 内置的函数,利用已有函数是更好的选择。
四、使用lambda的注意项
1、lambda 函数可以接收任意多個参数 (包括可选参数) 并且返回单个表达式的值。
2、lambda 函数不能包含命令,包含的表达式不能超过一个。
3、即使是print语句也不能用在 lambda形式中,只能使用表达式。并且匿名函数中不能出现if或者for等一些条件判断,循环的语句。
4、lambda表达式返回的函数直接返回这一句表达式的值。没有return,最后一个表达式的值即返回值。
5、匿名函数(lambda表达式),只能写在一行上,所以也有人也叫他单行函数。
6、使用lambda来定义的。
7、参数列表不需要用括号。
8、冒号不是用来开始新语句块的。
9、lambda 定义了一个匿名函数
10、lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
11、如果可以使用for...in...if来完成的,坚决不用lambda。
12、如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
13、在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。
14、lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
15、虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
五、lambda 使用场景
(1)、lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。他们完全是可选的(你总是能够使用def来替代它们),但是你仅需要嵌入小段可执行代码的情况下它们会带来一个更简洁的代码结构。
(2)、你所要做的操作是不重要的: 函数不值得一个名称。
(3)、使用 lambda 表达式比你所能想到的函数名称让代码更容易理解
(4)、你很确定还没有一个现有的函数能满足你的需求。
(5)特别适合在map,pcap等函数内需要函数参数的场景下。
(6)、最重要的是你团队的每个人都了解 lambda 表达式, 并且都同意使用它们。很多语言比如java,C#都具有lambda表达式功能。