首页  >  文章  >  后端开发  >  在循环中使用 Lambda 函数时,为什么所有按钮都会打印相同的索引?

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

Patricia Arquette
Patricia Arquette原创
2024-10-26 18:26:29898浏览

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中文网其他相关文章!

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