首页 >后端开发 >Python教程 >为什么 For 循环中的 Lambda 表达式仅使用最后一个值?

为什么 For 循环中的 Lambda 表达式仅使用最后一个值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-18 06:17:10225浏览

Why Do My Lambdas in a For Loop Only Use the Last Value?

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

在以下代码中:

options=["INFO", "WARNING", "DEBUG"]

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 时,它们的行为就好像选项被设置为“DEBUG”,即它在循环中采用的最后一个值。

此问题的出现是由于函数体中名称的求值时间造成的。在提供的代码中,执行函数时会计算名称。因此,循环中创建的 lambda 在执行时都引用相同的 option 值,即“DEBUG”。

要避免此问题,可以进行以下修改:

__cMenu.add_command(label="{}".format(option),
    command=lambda opt=option: self.filter_records(column, opt))

通过引入 option=option 作为 lambda 函数的参数,每个 lambda 在创建时捕获 option 的正确值,而不是依赖当时的值的执行。这确保了每个 lambda 都对选项的所需值进行操作。

以上是为什么 For 循环中的 Lambda 表达式仅使用最后一个值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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