在循环中使用 Lambda 函数时,为什么所有按钮都会打印相同的索引?

Patricia Arquette
发布: 2024-10-26 18:26:29
原创
912 人浏览过

Why Do All Buttons Print the Same Index When Using Lambda Functions in a Loop?

Python 中的 Lambda 闭包

在 Python 中,lambda 函数创建闭包,允许访问其范围之外的变量。但是,在循环中使用时,此行为可能会导致意外结果。

问题陈述

考虑以下代码,其中使用循环创建了五个按钮。每个按钮都绑定一个命令来打印其索引:

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

行为

单击时,所有按钮都会打印相同的索引,始终为 5。发生这种情况的原因是lambda 中的变量解析发生在执行时。单击按钮时,循环已结束,所有按钮的 i 都等于 5。

解决方案

要解决此问题,我们需要在每个 lambda 中创建捕获 i 的正确值的局部变量。这可以通过将 i 作为参数传递给 lambda 来实现,如下所示:

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

这会为每个 lambda 创建一个局部 i 变量,该变量保留循环迭代中 i 的值。通过这样做,我们确保每个按钮打印预期的索引。

以上是在循环中使用 Lambda 函数时,为什么所有按钮都会打印相同的索引?的详细内容。更多信息请关注PHP中文网其他相关文章!

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