为什么我的按钮命令总是在带有 Lambda 的循环中打印相同的索引?

Susan Sarandon
发布: 2024-10-26 03:54:27
原创
810 人浏览过

 Why Does My Button's Command Always Print the Same Index in a Loop with a Lambda?

了解 Lambda 中的闭包:解析变量

在这种情况下,您尝试在循环中创建多个按钮,每个按钮按钮触发打印特定索引值的命令。但是,您遇到了一个问题,即按钮的命令始终打印相同的索引“5”。

此行为源于 lambda 中闭包的性质。定义 lambda 时,它会捕获封闭范围的变量并在执行时引用它们。在你的例子中,封闭范围是循环,其中变量 i 代表当前索引。

不幸的是,当执行 lambda 时(按下按钮时),i 的值已经达到了最后一个迭代并且对于所有按钮都等于“5”。这是因为捕获的变量 i 是对同一内存位置的引用,并且它所保存的值会随着循环的进行而更新。

要解决此问题,您需要创建一个捕获正确值的闭包每个按钮的 i 。您可以通过为 lambda 函数中的 i 参数提供默认值来实现此目的。例如:

<code class="python">make_button = Tkinter.Button(frame, text="make!",
                              command=lambda i=i: makeId(i))</code>
登录后复制

通过提供 i=i 作为 lambda 参数的默认值,您将创建一个局部变量 i,它保存每个按钮的正确索引值。当按下按钮时,lambda 函数将使用捕获的局部变量 i 执行,并打印正确的索引。

以上是为什么我的按钮命令总是在带有 Lambda 的循环中打印相同的索引?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!