首页 >后端开发 >Python教程 >为什么 Python Lambda 函数捕获值而不是引用,如何解决这个问题?

为什么 Python Lambda 函数捕获值而不是引用,如何解决这个问题?

Barbara Streisand
Barbara Streisand原创
2024-12-27 10:18:10530浏览

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

了解 Lambda 函数中的闭包捕获

Python 闭包捕获定义它们的封闭范围的状态。具体来说,它们捕获 lambda 函数中引用的变量的值,这些变量不存在于其作用域中。

在提供的示例中,lambda 函数捕获变量 i,该变量在循环执行时被分配不同的值。但是,lambda 函数不会捕获对 i 所指向的对象的引用。相反,它们在创建时捕获 i 的值。

此行为解释了调用 adders[1](3) 时出现意外结果 6。尽管期望引用整数对象,但 lambda 函数捕获了值 3,这是分配给 i 的最终值。

实现在每个 lambda 函数中保留 i 当前值的所需行为,可以采用一种称为参数默认值的技术。通过向 lambda 函数提供默认参数,i 在创建时的值将被锁定。例如:

for i in [0, 1, 2, 3]:
   adders[i] = lambda a, i=i: i+a

在这种情况下,参数 i 的默认值设置为当前值i 的值。调用 lambda 函数时,它使用在创建过程中捕获的 i 值。

此方法可确保 adders 数组中的每个 lambda 函数捕获 i 的预期值,从而允许它们生成预期的值调用时输出。

以上是为什么 Python Lambda 函数捕获值而不是引用,如何解决这个问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn