首页 > 后端开发 > Python教程 > 为什么 Python 循环中的 Lambda 函数有时无法正确绑定?

为什么 Python 循环中的 Lambda 函数有时无法正确绑定?

Barbara Streisand
发布: 2024-12-26 19:43:22
原创
472 人浏览过

Why Do Lambda Functions in Python Loops Sometimes Fail to Bind Properly?

循环中的 Lambda 函数

在 Python 中,lambda 函数提供了一种定义匿名函数的简洁方法。然而,当在循环中使用时,如果不能确保正确的绑定,它们可能会导致意外的行为。

考虑以下代码片段:

directorys = {'login': <object>, 'home': <object>}
for d in directorys:
    self.command["cd " + d] = (lambda : self.root.change_directory(d))
登录后复制

目的是创建一个字典映射命令更改目录的函数的字符串。然而,结果却出乎意料:创建的两个 lambda 函数是相同的,并且执行相同的命令,将目录更改为“login”。

为什么会发生这种情况?

循环内的 Lambda 函数共享相同的函数作用域。这意味着 lambda 函数捕获的变量对于循环的所有迭代都是相同的。在本例中,“d”代表“directorys”字典中最后一项的值,即“login”。

解决问题

确保正确的绑定,我们需要确保每个 lambda 函数都可以访问自己唯一的“d”值。一种方法是将“d”作为具有默认值的参数传递:

lambda d=d: self.root.change_directory(d)
登录后复制

通过在循环的每次迭代中将“d”的默认值设置为“d”的当前值,我们为每个 lambda 函数创建一个唯一的闭包。或者,我们可以使用额外的闭包技术来实现相同的结果:

(lambda d=d: lambda: self.root.change_directory(d))()
登录后复制

这个外部 lambda 函数为“d”创建一个闭包,而内部 lambda 函数使用闭包中的“d”。

以上是为什么 Python 循环中的 Lambda 函数有时无法正确绑定?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板