理解 Lambda 函数中的闭包捕获
在 Python 中,lambda 函数中闭包的特殊行为让开发人员感到困惑。本文深入探讨了闭包捕获的复杂性,准确解释了捕获的内容以及如何控制捕获机制。
捕获机制
Lambda 函数闭包捕获来自他们的封闭范围。这些变量在创建闭包时被有效地冻结。在提供的示例中,lambda 函数从 for 循环捕获 i 的值。然而,当在后续循环迭代中修改 i 时,捕获的值在闭包中保持不变。
控制捕获
捕获变量的当前值,而不是比最终值,可以添加一个带有默认值的虚拟参数。这种技术强制闭包在创建闭包时捕获变量的值。
在修改后的代码中:
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i + a # dummy parameter with default value
虚拟参数 i 的默认值为循环中的电流 i。因此,每个 lambda 函数在创建时都会捕获 i 的值,从而导致 adders[1](3) 返回 4 的预期行为。
结论
通过了解Python中的闭包捕获机制,开发者可以有效地控制和操作闭包。使用具有默认值的虚拟参数提供了一种捕获变量当前值的可靠方法,确保代码的正确执行。
以上是Python Lambda 函数如何处理闭包捕获,以及如何控制它?的详细内容。更多信息请关注PHP中文网其他相关文章!