首页  >  文章  >  后端开发  >  为什么我的 Lambda 函数总是打印“5”?在 Python 中捕获变量的指南。

为什么我的 Lambda 函数总是打印“5”?在 Python 中捕获变量的指南。

Susan Sarandon
Susan Sarandon原创
2024-10-26 17:26:03369浏览

Why Does My Lambda Function Always Print

在 Lambda 函数中捕获变量:闭包

在 lambda 函数中,从封闭范围捕获变量是一个常见问题。默认情况下,lambda 函数引用其封闭范围内的变量。然而,这些引用的解析发生在执行时,而不是定义期间。

考虑这个代码片段,其中我们使用循环创建五个按钮,并将命令绑​​定到每个按钮以使用lambda 函数:

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

您可能期望此代码将打印所单击按钮的索引。但是,它总是打印“5”,因为 i 的值是在循环结束时捕获的,即 i 递增到 5 之后。

解决方案:使用闭包

为了解决这个问题,我们可以使用闭包。闭包是一个函数,它从其封闭范围捕获变量并在定义时初始化它们。这使我们能够捕获每个按钮的正确 i 值。

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

通过在 lambda 函数中分配 i=i,我们创建一个局部变量,该变量使用循环中 i 的当前值进行初始化。这确保每个按钮都有自己对其预期索引的引用。

以上是为什么我的 Lambda 函数总是打印“5”?在 Python 中捕获变量的指南。的详细内容。更多信息请关注PHP中文网其他相关文章!

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