首页 >后端开发 >Python教程 >为什么循环中的 Lambda 会捕获最后一个值,如何避免这种情况?

为什么循环中的 Lambda 会捕获最后一个值,如何避免这种情况?

Patricia Arquette
Patricia Arquette原创
2024-12-23 17:01:09134浏览

Why Do Lambdas in Loops Capture the Last Value, and How Can This Be Avoided?

For 循环中的 Lambda 捕获最后一个值

在您的代码中:

for i in range(len(options)):
    option = options[i]
    __cMenu.add_command(
        label="{} ".format(option),
        command=lambda: self.filter_records(column, option)
    )

每个 lambda 捕获变量选项,在创建 lambda 函数时对其求值。这意味着所有 lambda 捕获相同的 option 值,这是它在循环中采用的最后一个值。

为了避免这种情况,您需要确保每个 lambda 捕获不同的 option 值。这可以通过使用带有可选参数的 lambda 语法来完成,如下所示:

for i in range(len(options)):
    option = options[i]
    __cMenu.add_command(
        label="{} ".format(option),
        command=lambda opt=option: self.filter_records(column, opt)
    )

在这种情况下,lambda 函数捕获 option 的值作为参数 opt,确保每个 lambda 捕获不同的值期权的价值。

以上是为什么循环中的 Lambda 会捕获最后一个值,如何避免这种情况?的详细内容。更多信息请关注PHP中文网其他相关文章!

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