首页 > 解决方案 > 为什么我无法访问使用 lambda 函数传递的迭代值?

问题描述

我预计会看到“0”值,它代表该迭代的信息,打印到屏幕上。

但是,它只显示了 for 循环的最后一个“i”值,在我的例子中是“2”。

我已经尝试了很长时间来找出答案。在测试过程中,我发现它可能与变量“i”的变化有关,但我仍然不知道如何修复它。

那么如何访问该迭代的 i 值呢?

这是我的代码:

class A:
    def __init__(self, func):
        self.func = func
    def call(self):
        self.func()

xs = []

for i in range(3):
    x = A(lambda: print(i))
    xs.append()

xs[0].call()

我得到的结果:2

我想要的结果:0

标签: pythonfor-looplambda

解决方案


我修改了你的代码并得到 0 作为输出。

class A:
    def __init__(self, func):
        self.func = func
    def call(self):
        self.func()

xs = []

for i in range(3):
    y= A(lambda x=i: print(x)) #== changes here
    xs.append(y)

xs[0].call()

推荐阅读