美文网首页Python语言
关于Python中的匿名函数lambda

关于Python中的匿名函数lambda

作者: 君临天下夜未央 | 来源:发表于2018-08-22 18:47 被阅读19次

lambda是Python编程语言中使用频率较高的一个关键字。那么,什么是lambda?它有哪些用法?

一、语法

lambda [ arg1 [arg2, arg3, … argN] ] : expression
                      – 《Python核心编程》

从《Python核心编程》书本中包含了以上lambda表达式的表述。也就是说在lambda右侧的式子中,冒号左边的为参数值,右边的为计算表达式。

二、 实例说明

1.单层参数求和

现在假设需要对两个数进行求和运算。对于正常的逻辑代码,不难写出如下代码:

def sum(x, y):
    return x + y

而在lambda中,我们可以这样来写:

p = lambda x, y: x + y

代码简洁了许多

2.嵌套参数求和

注:下面的一段代码实际上是存在语法错误的,此代码的目的纯粹只是为了说明问题。请勿模仿

def sum_outer(x=0):
    def sum_inner(y):
        return x + y

采用lambda改写后的代码如下:

def test_lamdba2(x=0):
    return lambda y: x + y

三、特性

lambda函数有如下特性:

  • lambda函数是匿名的:所谓匿名函数,通俗地说就是没有名字的函数。lambda函数没有名字。
  • lambda函数有输入和输出:输入是传入到参数列表argument_list的值,输出是根据表达式expression计算得到的值。
  • lambda函数一般功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。

四、用法说明

由于lambda语法是固定的,其本质上只有一种用法,那就是定义一个lambda函数。在实际中,根据这个lambda函数应用场景的不同,可以将lambda函数的用法扩展为以下几种:
1.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。

例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。例如,执行add(1,2),输出为3。

2.将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。

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

3.将lambda函数作为其他函数的返回值,返回给调用者。

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

4.将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'。

另外,部分Python库函数也接收函数作为参数,例如gevent的spawn函数。此时,lambda函数也能够作为参数传入。

五、变量作用域说明

关于变量在Lambda中的作用域从上面的几幅图中也可以看出一二来,主要可以做出以下几点的总结:

  1. 对局部变量可见
  2. 对全局变量可见
  3. 对当前层传入的参数可见
  4. 对上层函数传入的参数可见
  5. 对上层Lambda传入的参数可见

六、Lambda评价

优点

  1. 在普通代码里几行的代码,在Lambda中只需要一行就可以解决。所以代码比以前更简洁了
  2. 可以在某一个方法内部定义,这样可以提高操作的便捷性
    缺点
  3. Lambda是一个匿名函数,因为是匿名,所以可读性变差了
  4. 有时候有多个Lambda嵌套(就像实例中的第3点一样),让程序变得难以理解

相关文章

  • 13.Python编程:lambda表达式(匿名函数)

    前面学习了Python中的函数,本文学习一下匿名函数。Python 使用 lambda 来创建匿名函数。所谓匿名,...

  • Python匿名函数Lambda

    1.匿名函数介绍 在Python中,通过lambda关键字来定义的函数称为匿名函数;lambda函数能接收任何数量...

  • Python lambda函数

    lambda函数 在Python中,lambda函数是使用lambda表达式定义的单行匿名函数。它常用于将函数作为...

  • Python的匿名函数

    Python的匿名函数通过关键字 lambda ,下例中 关键字lambda表示匿名函数,冒号前面的x表示函数参数...

  • Python之lambda表达式

    ---Python之lambda表达式(创建匿名函数) Python允许使用lambda关键字来创建匿名函数。 先...

  • Python中的lambda函数

    Python中的lambda函数 在Python中,我们使用lambda关键字来声明一个匿名函数,这就是为什么我们...

  • Python中的匿名函数--lambda与函数式编程

    Python中的匿名函数,称为lambda匿名函数的格式: 比如,计算平方 对字典中的key/value,根据va...

  • lambda匿名函数

    匿名函数 python 使用 lambda 来创建匿名函数。 lambda只是一个表达式,函数体比def简单很多。...

  • python函数

    匿名函数 python 使用 lambda 来创建匿名函数。 lambda只是一个表达式,函数体比def简单很多。...

  • python基础--匿名函数&高阶函数

    lambda表达式返回匿名函数 python使用lambda创建匿名函数,lambda的主题是一个表达式而不是代码...

网友评论

    本文标题:关于Python中的匿名函数lambda

    本文链接:https://www.haomeiwen.com/subject/bjnyiftx.html