Python Lambda 函数示例
⚡ 智能摘要
Lambda 函数 Python 是使用 lambda 关键字而不是 def 定义的小型匿名函数。它们包含单个表达式,接受任意数量的参数,并且通常直接传递给内置函数,例如 map()、filter() 和 sorted()。

Lambda 函数 Python?
A Lambda 函数 Python 编程中匿名函数或没有名称的函数。它是一个小而受限制的函数,不超过一行。与普通函数一样,Lambda 函数可以有多个参数和一个表达式。
In Python中,lambda 表达式(或 lambda 形式)用于构造匿名函数。为此,你将使用 拉姆达 关键字(就像你使用 DEF 定义普通函数)。 您在以下位置定义的每个匿名函数 Python 将包含 3 个基本部分:
- lambda 关键字。
- 参数(或绑定变量)
- 函数主体。
lambda 函数可以有任意数量的参数,但函数体只能包含 一种 表达式。此外,lambda 仅用一行代码编写,并且可以立即调用。您将在接下来的示例中看到这一切。
语法和示例
编写 lambda 函数的正式语法如下:
lambda p1, p2: expression
这里,p1 和 p2 是传递给 lambda 函数的参数。您可以根据需要添加任意数量的参数。
但是请注意,我们没有像常规函数那样在参数周围使用括号。最后一部分(表达式)可以是任何有效的表达式。 Python 对传递给函数的参数进行运算的表达式。
例子1
现在您已经了解了 lambda,让我们用一个例子来尝试一下。所以,打开你的 IDLE 并输入以下内容:
adder = lambda x, y: x + y print (adder (1, 2))
Code 说明
在这里,我们定义一个变量来保存 lambda 函数返回的结果。
1. lambda 关键字用于定义匿名函数。
2. x 和 y 是我们传递给 lambda 函数的参数。
3. 这是函数主体,它添加了我们传递的 2 个参数。请注意,这是一个表达式。您不能在 lambda 函数主体中写入多个语句。
4. 我们调用该函数并打印返回值。
例子2
这是一个理解 lambda 函数基本原理和语法的简单示例。现在让我们尝试打印出一个 lambda 函数并查看结果。同样,打开你的…… IDLE 并输入以下内容:
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))
现在保存文件并按 F5 运行程序。这是您应该获得的输出。
输出:
<function <lambda> at 0x00000185C3BF81E0>
这里发生了什么?让我们看看代码,以便更好地了解情况。
Code 说明:
1. 在这里,我们定义一个 绳子 您将把它作为参数传递给 lambda 函数。
2. 我们声明一个 lambda 表达式,该表达式调用 print 语句并打印结果。
但为什么程序没有打印我们传递的字符串呢?这是因为 lambda 表达式本身返回的是一个函数对象。在这个例子中,lambda 表达式并没有被打印出来。 被称为 通过打印函数,但只是 返回 函数对象及其存储的内存地址。这就是控制台打印的内容。
例子3
但是,如果你编写如下程序:
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)
按 F5 运行它,你会看到类似这样的输出。
输出:
some kind of a useless lambda
现在,lambda 函数被调用了,我们传递的字符串被打印到控制台。但是,这奇怪的语法是什么?为什么 lambda 函数的定义要用括号括起来?让我们现在来理解一下。
Code 说明:
1. 这是我们在上一个示例中定义的同一个字符串。
2. 在本部分中,我们定义了一个 lambda 表达式,并通过传递字符串作为参数立即调用它。这被称为立即执行函数表达式 (IIFE),您将在本教程的后续章节中了解更多相关内容。
例子4
让我们来看最后一个例子,以了解 lambda 表达式和普通函数是如何执行的。打开你的…… IDLE 并在新文件中输入以下内容:
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))
现在,保存文件并按 F5 运行程序。如果没有出错,输出结果应该类似于这样。
输出:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Code 说明:
1. 一个名为 guru 的函数,它接受另一个函数作为第一个参数,以及任何其他参数在其后。
2. printer_one 是一个简单的函数,它会打印传递给它的参数并返回它。
3. printer_two 与 printer_one 类似,但没有 return 语句。
4. 在本部分中,我们调用 guru 函数,并将打印机函数和字符串作为参数传递。
5. 这是使用 lambda 实现第四步(即调用 guru 函数)的语法。
在下一节中,你将学习如何使用 lambda 函数 地图(), 降低()和 过滤() in Python.
使用 lambda 表达式 Python 内建
Lambda 函数提供了一种优雅而强大的方式,可以使用内置方法执行操作 Python。这是可能的,因为 lambda 可以被立即调用并作为参数传递给这些函数。
IIFE 中 Python LAMBDA
即时执行函数 代表 立即调用函数执行。 这意味着 lambda 函数一旦定义即可调用。让我们通过一个例子来理解这一点;启动你的 IDLE 并输入以下内容:
(lambda x: x + x)(2)
以下是输出和代码解释:
lambda 表达式可以立即调用,这使得你可以在 map() 和 reduce() 等函数中使用它们。这很有用,因为你可能不想再次使用这些函数。
filter() 中的 lambda
过滤函数用于从元素序列中选择一些特定元素。该序列可以是任何迭代器,如列表、集合、元组等。
所选元素基于一些预定义的约束条件。它接受两个参数:
- 定义过滤约束的函数
- 序列(任何迭代器,如列表、元组等)
例如,
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
这是输出:
[10, 8, 7, 5, 11]
Code 说明:
1. 在第一个语句中,我们定义了一个包含一些数字的列表,称为序列。
2. 在这里,我们声明一个名为filtered_result的变量,它将存储filter()函数返回的过滤值。
3. 一个 lambda 函数,在列表的每个元素上运行,如果大于 4 则返回 true。
4. 打印过滤函数返回的结果。
map() 中的 lambda
map 函数用于对序列中的每个元素应用特定操作。与 filter() 函数类似,它也接受两个参数:
- 定义对元素执行的操作的函数
- 一个或多个序列
例如,这里有一个打印给定列表中数字平方的程序:
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
输出:
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
Code 说明:
1. 在这里,我们定义一个名为序列的列表,其中包含一些数字。
2. 我们声明一个名为 filtered_result 的变量,用于存储映射后的值。
3. 一个 lambda 函数,它对列表中的每个元素运行,并返回该数字的平方。
4. 打印 map 函数返回的结果。
Reduce() 中的 lambda
Reduce 函数与 map() 类似,用于对序列中的每个元素应用操作。但是,其工作原理与 map 不同。以下是 Reduce() 函数计算输出所遵循的步骤:
步骤1) 对序列的前2个元素执行定义的操作。
步骤2) 保存此结果。
步骤3) 使用保存的结果和序列中的下一个元素执行操作。
步骤4) 重复此操作,直到不再剩余元素。
它还需要两个参数:
- 定义要执行的操作的函数
- 序列(任何迭代器,如列表、元组等)
例如,这里有一个返回列表中所有元素乘积的程序:
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
这是输出:
120
Code 说明:
1. 从 functools 模块导入 reduce。
2. 在这里,我们定义一个名为序列的列表,其中包含一些数字。
3. 我们声明一个名为 product 的变量,它将存储简化后的值。
4. 一个 lambda 函数,它对列表中的每个元素运行。它将返回该元素与先前结果的乘积。
5. 打印 reduce 函数返回的结果。
为什么(以及为什么不)使用 lambda 函数?
正如您将在下一节中看到的那样,lambda 在解释器级别与常规函数的处理方式相同。在某种程度上,您可以说 lambda 为编写返回单个表达式的函数提供了紧凑的语法。
但是,你应该知道何时适合使用 lambda 表达式,何时应该避免使用。在本节中,你将学习一些 lambda 表达式的设计原则。 Python 开发者在编写 lambda 表达式时。
lambda 表达式最常见的应用场景之一是在函数式编程中,因为 Python 支持一种称为函数式编程的编程范式(或风格)。
它允许你将一个函数作为参数传递给另一个函数(例如,在 map、filter 等函数中)。在这种情况下,使用 lambda 表达式提供了一种优雅的方式来创建一次性函数并将其作为参数传递。
什么时候不应该使用 Lambda?
您永远不应该在生产环境中编写复杂的 lambda 函数。维护您的代码的程序员很难解密它。如果您发现自己编写了复杂的单行表达式,那么定义适当的函数将是一种更好的做法。作为最佳实践,您需要记住简单的代码总是比复杂的代码更好。
Lambda 与常规函数
如前所述,lambda 函数就是没有绑定标识符的函数。简单来说,它们是没有名称的函数(因此称为匿名函数)。下表说明了 lambda 函数和普通函数之间的区别。 Python.
| 拉姆达 | 常规函数 |
|---|---|
语法:
lambda x : x + x
|
语法:
def (x) : return x + x |
| Lambda 函数主体中只能有一个表达式。 | 常规函数主体中可以包含多个表达式和语句。 |
| Lambda 函数没有与之关联的名称。因此,它们也被称为匿名函数。 | 常规函数必须有名称和签名。 |
| Lambdas 不包含返回语句,因为主体会自动返回。 | 需要返回值的函数应该包含 return 语句。 |
差异的解释
lambda 和常规函数之间的主要区别在于,lambda 函数仅计算单个表达式并产生一个函数对象。因此,我们可以命名 lambda 函数的结果并在程序中使用它,就像我们在上一个示例中所做的那样。
上述示例的常规函数如下所示:
def adder (x, y): return x + y print (adder (1, 2))
在这里,我们必须定义一个 姓名 对于函数 回报 结果当我们 呼叫 它。lambda 函数不包含 return 语句,因为它只有一个表达式,该表达式默认总是返回该表达式的值。你甚至不需要给 lambda 函数赋值,因为它可以立即调用(参见上一节)。正如你将看到的,当我们将 lambda 函数与以下情况结合使用时,它们会变得特别强大: Python的内置函数。
但是,您可能仍然想知道 lambda 与返回单个表达式的函数(如上面的函数)有何不同。在解释器级别,没有太大区别。这听起来可能令人惊讶,但是您在 Python 被解释器视为正常函数。
在字节码层面,这两个定义由相同的方式处理: Python 解释器。现在,你不能给函数命名。 拉姆达 因为它被保留 Python但是,任何其他函数名都会产生相同的字节码。
