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