首页 >后端开发 >Python教程 >为什么 Python For 循环中的 Lambda 函数仅捕获最后一个值?

为什么 Python For 循环中的 Lambda 函数仅捕获最后一个值?

Linda Hamilton
Linda Hamilton原创
2024-12-06 02:29:10449浏览

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

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

在 for 循环中使用 lambda 函数时,lambda 捕获的值可能不是预期的值。这个问题的出现是由于 Python 垃圾回收的运作方式,导致只保留变量的最后一个值。

为了说明这个概念:

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 函数应该捕获选项的唯一值,但所有选项的行为就像选项被设置为“DEBUG”,它在循环中假定的最终值。

要解决这个问题,正如解决方案中所建议的,每个 lambda 函数必须捕获自己的变量。这可以通过为 option 分配一个新的局部变量来实现,如下所示:

for i in range(len(options)):
    opt = options[i]  # Assign a new variable to capture the unique value
    __cMenu.add_command(
        label="{}".format(opt),
        command=lambda: self.filter_records(column, opt)
    )

或者,可以按如下方式重写 lambda 表达式:

lambda opt=option: self.filter_records(column, opt)  # Differentiate loop variable and function parameter

通过捕获适当的值, lambda 函数可以在循环内独立运行,从而实现预期的行为。

以上是为什么 Python For 循环中的 Lambda 函数仅捕获最后一个值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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