Python的lambda函数总结

版权声明:本文为博主原创文章,转载请务必注明出处和作者,谢谢合作! https://blog.csdn.net/zhanshen112/article/details/90603865

Python的匿名函数lambda函数

lambda函数定义

python 使用 lambda 来创建匿名函数。lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

简单理解起来。匿名函数lambda是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。

lambda函数实例

s=lambda x,y:x+y
h=lambda x,y,z:x+y-z
print(s(10,20),h(10,20,50))

lambda函数的特点和使用场景

特点

  • 从函数命名的角度:匿名,直接返回可供调用的值
  • 从输入输出的角度:支持多个输入参数,但只支持一个表达式
  • 从函数功能的角度:结构简单,无须定义函数名。但所能实现的功能也极其受限。
  • 从访问变量的角度:只支持访问lambda自己定义的变量。不支持外部变量访问
  • 从运行效率的角度:lambda实际上仍开辟了一个内存单元,并没有提升运行效率

使用场景

  • lambda函数复制给变量:减少函数定义的麻烦,同时支持代码复用。
add=lambda x,y:x+y
print(add(1,2))
  • lambda函数赋值给函数:利用lambda函数实现对已有函数的重新定义。

例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。

  • 利用lambda函数进行函数嵌套:利用lambda构造嵌套的内部和外部函数,实现闭包编程

函数的返回值也可以是函数。例如return lambda x, y: x+y返回一个加法函数。这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。对应的,将包含嵌套函数的函数称之为外部函数。内部函数能够访问外部函数的局部变量,这个特性是闭包(Closure)编程的基础,在这里我们不展开。

  • 将lambda函数作为参数传递给其他函数
部分Python内置函数接收函数作为参数。典型的此类内置函数有这些。

- filter函数。此时lambda函数用于指定过滤列表元素的条件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。
- sorted函数。此时lambda函数用于指定对列表中所有元素进行排序的准则。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
- map函数。此时lambda函数用于指定对列表中每一个元素的共同操作。例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。
- reduce函数。此时lambda函数用于指定列表中两两相邻元素的结合条件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。

猜你喜欢

转载自blog.csdn.net/zhanshen112/article/details/90603865