首页 >后端开发 >Python教程 >为什么循环中的 Lambda 函数都引用相同的变量?

为什么循环中的 Lambda 函数都引用相同的变量?

Barbara Streisand
Barbara Streisand原创
2024-12-29 03:45:10966浏览

Why Do My Lambda Functions in a Loop All Refer to the Same Variable?

循环中的 Lambda

在提供的代码中,目的是创建一个命令函数字典,其中每个值都是一个 lambda 表达式使用特定目录名称调用 self.root.change_directory 。但是,代码错误地导致所有命令函数执行相同的目录更改。

出现问题的原因是 lambda 表达式引用单个变量 d,该变量对于循环的每次迭代都是相同的。因此,所有 lambda 表达式最终都指向 d 的最后一个值。

要纠正此问题,需要将 d 的唯一值绑定到每个 lambda 表达式。这可以通过使用 lambda 参数的默认值来实现,如下所示:

self.command["cd " + d] = lambda d=d: self.root.change_directory(d)

在这种情况下,d=d 为每次迭代创建 d 到 d 的当前值的新绑定。循环。因此,每个 lambda 表达式都有自己对 d 值的唯一引用。

或者,可以使用闭包来实现相同的效果:

self.command["cd " + d] = (lambda d: lambda: self.root.change_directory(d))(d)

此闭包创建一个新的每个 lambda 表达式的环境,其中 d 绑定到 d 的当前值。因此,每个 lambda 表达式都可以访问其自己唯一的 d 值。

以上是为什么循环中的 Lambda 函数都引用相同的变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

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