首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详聊Python Lambda 函数

Python 于 1980 年代后期由荷兰Centrum Wiskunde & Informatica (CWI)的Guido van Rossum构想,作为ABC 编程语言的继承者,它受到SETL的启发,能够异常处理和与变形虫操作系统。它的实施始于 1989 年 12 月。Van Rossum 作为首席开发人员承担了该项目的全部责任,直到 2018 年 7 月 12 日,当他宣布从他作为 Python 的“终身仁慈独裁者”的职责中“永久休假”时”,这是 Python 社区授予他的头衔,以反映他作为项目首席决策者的长期承诺。2019 年 1 月,活跃的 Python 核心开发人员选出了一个由五人组成的指导委员会来领导该项目。

Python 2.0 于 2000 年 10 月 16 日发布,具有许多主要的新功能,例如列表理解、循环检测垃圾收集、引用计数和Unicode支持。 Python 3.0,于 2008 年 12 月 3 日发布,其许多主要功能向后移植到 Python 2.6.x 和 2.7.x。Python 3 的发行版包括该2to3实用程序,它可以自动将 Python 2 代码转换为 Python 3。

Python 2.7 的生命周期结束最初定于 2015 年,然后推迟到 2020 年,因为担心大量现有代码不能轻易地转发到 Python 3。 没有进一步的安全补丁或将为其发布其他改进。目前仅支持 3.7 及更高版本。2021 年,Python 3.9.2 和 3.8.8 加速发布,因为所有版本的 Python(包括 2.7 )都存在安全问题,可能导致远程代码执行和网络缓存中毒。

2022 年,Python 3.10.4 和 3.9.12 被加速发布以及 3.8.13 和 3.7.13,因为存在许多安全问题。当 Python 3.9.13 于 2022 年 5 月发布时,宣布 3.9 系列(加入旧系列 3.8 和 3.7)在未来只会收到安全修复程序。2022 年 9 月 7 日,由于潜在的拒绝服务攻击,发布了四个新版本:3.10.7、3.9.14、3.8.14 和 3.7.14。

截至 2022 年 11 月,Python 3.11.0 是当前的稳定版本。3.10 的显着变化包括提高程序执行速度和改进错误报告。

尽管 Python 是一种面向对象的编程语言,但是当你进行各种函数式编程时,lambda 函数非常方便。

注意:本文假设你已经了解 Python 编程以及如何使用常规函数,还假定你的设备上安装了 Python 3.8 或更高版本。

解释 Python Lambda 函数

在 Python 中,函数可以接受一个或多个位置参数或关键字参数、可变参数列表、可变关键字参数列表等。它们可以传递给高阶函数并作为输出返回。常规函数可以有多个表达式和多个语句。他们也总是有一个名字。

Python lambda 函数只是一个匿名函数。它也可以称为无名函数。普通的 Python 函数由def关键字定义。Python 中的 Lambda 函数通常由lambda关键字、任意数量的参数和一个表达式组成。

注意:术语lambda 函数、lambda 表达式和lambda 形式可以互换使用,具体取决于编程语言或程序员。

Lambda 函数主要用作单行函数。它们经常在高阶函数中使用,例如map()和filter()。这是因为匿名函数作为参数传递给高阶函数,这不仅在 Python 编程中这样做。

lambda 函数对于在 Python 中处理列表理解也非常有用——为此目的使用 Python lambda 表达式有多种选择。

Lambda 在Tkinter、wxPython、Kivy等UI 框架中用于条件渲染时非常有用。尽管本文未涵盖 Python GUI 框架的工作原理,但一些代码片段显示大量使用 lambda 函数来渲染基于用户的交互。

在深入研究 Python Lambda 函数之前需要了解的事情

因为 Python 是一种面向对象的编程语言,所以一切都是对象。Python 类、类实例、模块和函数都作为对象处理。

可以将函数对象分配给变量。

在 Python 中将变量分配给常规函数并不少见。此行为也可以应用于 lambda 函数。这是因为它们是函数对象,即使它们是无名的:

高阶函数,如 map()、filter() 和 reduce()

你可能需要在内置函数中使用 lambda 函数,例如filter()、 map()和reduce()— 它是从 Python 中的 functools 模块导入的,因为它不是内置函数。默认情况下,高阶函数是接收其他函数作为参数的函数。

如下面的代码示例所示,普通函数可以替换为 lambda,作为参数传递给这些高阶函数中的任何一个:

语句和表达式的区别

开发人员之间的一个常见混淆点是在编程中区分语句和表达式。

语句是做某事或执行某项操作(例如或条件)的任何代码段,例如if或while条件。

表达式由变量、值和运算符的组合组成,并计算出一个新值。

当我们探索 Python 中的 lambda 函数时,这种区别很重要。像下面这样的表达式返回一个值:

语句如下所示:

如何使用 Python Lambda 函数

Python 风格指南规定每个 lambda 函数都必须以lambda关键字开头(不同于以def关键字开头的普通函数)。lambda 函数的语法通常是这样的:

Lambda 函数可以采用任意数量的位置参数和关键字参数,后跟一个冒号和一个表达式。不能有一个以上的表达式,因为它在语法上受到限制。让我们检查下面的 lambda 表达式示例:

在上面的示例中,lambda 表达式被分配给了变量add_number。通过传递参数进行函数调用,其计算结果为 14。

下面我们再举一个例子:

如上所示,lambda 函数的计算结果为 728.0。Python lambda 函数中使用了位置参数和关键字参数的组合。在使用位置参数时,我们无法更改函数定义中概述的顺序。我们只能将关键字参数放在位置参数之后的任何位置。

Lambda 函数始终像JavaScript 中的立即调用函数表达式(IIFE)一样执行。这主要与 Python 解释器一起使用,如以下示例所示:

lambda 函数对象包含在括号中,另一对括号紧跟传递的参数。作为 IIFE,对表达式求值并且函数返回分配给变量的值。

Python lambda 函数也可以在列表理解中执行。列表理解总是有一个输出表达式,它被一个 lambda 函数代替。这里有些例子:

在 Python 中编写三元表达式时可以使用 Lambda 函数。三元表达式根据给定条件输出结果。查看以下示例:

高阶函数中的 Lambda 函数

高阶函数的概念在 Python 中很流行,就像在其他语言中一样。它们是接受其他函数作为参数并返回函数作为输出的函数。

在 Python 中,高阶函数有两个参数:一个函数和一个可迭代对象。函数参数应用于可迭代对象中的每个项目。由于我们可以将函数作为参数传递给高阶函数,因此我们同样可以传入 lambda 函数。

以下是与map()函数一起使用的 lambda 函数的一些示例:

以下是与filter()函数一起使用的一些 lambda 函数:

以下是与reduce()函数一起使用的一些 lambda 函数:

结论

尽管 Python lambda 可以显著减少编写的代码行数,但应谨慎使用,仅在必要时才使用。代码的可读性应优先于简洁性。对于更具可读性的代码,请始终使用适合 lambda 函数的普通函数,如Python Style Guide所推荐的那样。

Lambda 可以非常方便地使用 Python 三元表达式,但同样不要牺牲可读性。当使用高阶函数时,Lambda 函数真正发挥作用。

总之:

Python lambda 非常适合编写单行函数。

它们也用于 IIFE(立即调用的函数表达式)。

当有多个表达式时不应使用 Lambda,因为它会使代码不可读。

Python 是一种面向对象的编程语言,但 lambda 是探索 Python 函数式编程的好方法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230227A02AG800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券