Python 匿名函数(Lambda 函数)完全指南

在这篇文章中,将深入探讨 Python 中的匿名函数,也称为 Lambda 函数。将讨论它们是什么、它们的语法、如何使用它们以及一些使用示例。这篇文章将帮助全面理解 Python 中的 Lambda 函数,并探讨何时使用它们以及何时避免使用它们。

什么是 Python 中的 Lambda 函数?

在 Python 中,Lambda 函数是一种没有名称的函数定义方式。与使用 def 关键字定义普通函数不同,Lambda 函数使用 lambda 关键字。因此,匿名函数也被称为 Lambda 函数。

如何在 Python 中使用 Lambda 函数?

Python 中的 Lambda 函数遵循以下语法: lambda arguments: expression 请注意,Lambda 函数可以有任意数量的参数,但只能有一个表达式。首先,表达式被求值然后返回结果。在需要函数对象的地方使用 Lambda 函数。

Python 中 Lambda 函数的示例

在这个部分,将看到一个将输入值翻倍(即乘以二)的 Lambda 函数示例。

double = lambda x: x * 2print(double(10))

代码解释:在上面的代码中,lambda x: x * 2 是一个 Lambda 函数。这里的 x 是参数,x * 2 是被求值并返回给用户的表达式。这个函数没有名称,它返回一个函数对象,该对象被赋值给标识符 double。现在可以称之为标准函数。语句 double = lambda x: x * 2 几乎等同于: def double(x): return x * 2

Python中 Lambda 函数的用途

在需要一个临时的无名称函数时使用 Lambda 函数。在 Python 中,通常将 Lambda 函数作为参数传递给高阶函数(接受其他函数作为参数的函数)。例如,这些与内置函数如 filter()map()reduce() 等一起使用,将在本文后面讨论。

为什么要使用 Lambda 函数?

正如前一节所见,Lambda 函数在解释器级别上被视为与普通函数相同。在某种程度上,可以说 Lambda 函数为返回一个表达式的函数提供了紧凑的语法。然而,必须知道何时使用 Lambda 函数是合适的,何时应该避免使用它们。在这一节中,将学习到 Python 开发者编写 Lambda 函数时使用的基本原则之一。

何时不应使用 Lambda 函数?

在生产环境中,永远不应该编写复杂的 Lambda 函数,因为这将使得维护代码的程序员非常难以理解。如果发现自己在编写复杂的单行表达式,定义一个正规的函数可能是一个更好的实践。因此,作为最佳实践,应该记住,简单的代码通常比复杂的代码更好。

在 filter() 中使用 Lambda 函数

filter() 函数用于从元素序列中选择特定的元素。这个函数使用的序列是一个迭代器,如列表、集合、元组等。被选择的元素基于一些预定义的条件。它接受两个参数:一个定义过滤条件的函数和一个序列(任何迭代器,如列表、元组等)。

sequences = [10,2,8,7,5,4,3,11,0, 1]filtered_answer = filter (lambda x: x > 6, sequences)print(list(filtered_answer))

输出: [10, 8, 7, 11] 代码解释:在第一个语句中,定义了一个名为 sequences 的列表容器,其中包含一些数字。在这里,声明了一个名为 filtered_answer 的变量,它可以存储由 filter() 函数返回的过滤值。一个 Lambda 函数对列表的每个元素运行并返回 true 如果它大于 6。打印由 filter 函数返回的结果。

在 map() 中使用 Lambda 函数

map() 函数用于对序列中的每个元素执行特定的操作。像 filter() 一样,它也接受两个参数:一个定义要在元素上执行的操作的函数和一个或多个序列。

sequences = [10,2,8,7,5,4,11]squared_result = map (lambda x: x*x, sequences)print(list(squared_result))

输出: [100, 4, 64, 49, 25, 16, 121] 代码解释:在这里,定义了一个名为 sequences 的列表容器,其中包含一些数字。声明了一个名为 squared_result 的变量,它可以存储映射值。一个 Lambda 函数对列表的每个元素运行并返回该数字的平方。打印由 map 函数返回的结果。

在 reduce() 中使用 Lambda 函数

reduce() 函数,像 map() 一样,用于对序列中的每个元素执行操作。然而,它的工作方式与 map 函数略有不同。reduce() 函数计算输出的步骤如下: 步骤 1:对序列的前两个元素执行定义的操作。 步骤 2:保存这个结果 步骤 3:用保存的结果和序列中的下一个元素执行操作。 步骤 4:重复直到没有更多的元素。 它也接受两个参数:一个定义如何执行操作的函数和一个序列(任何迭代器,如列表、元组等)。

from functools import reducesequences = [1,2,3,4,5,6]product = reduce (lambda x, y: x*y, sequences)print(product)

输出: 720 代码解释:从 functools 模块导入 reduce。在这里,定义了一个名为 sequences 的列表容器,其中包含一些数字。声明了一个名为 product 的变量,它可以存储减少的值。一个 Lambda 函数逐步对列表的每个元素运行并返回该数字的乘积,根据前一个结果。打印由 reduce 函数返回的结果。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485