更改
lambda: select(b.cat, b.value)
至
lambda b = b: select(b.cat, b.value)
在您的原始代码中,
b不是的局部变量
lambda;在封闭范围内找到它。一旦
for-loop完成后,
b保留其最后的值。这就是为什么
lambda所有功能都使用最后一个按钮的原因。
如果将lambda定义为采用一个具有默认值的参数,则默认值在 定义
lambda时确定(并固定)。现在
b是的局部变量
lambda,并且在不带参数
b的情况下调用lambda时,Python会将其设置为默认值,并根据需要将其高兴地设置为各种不同的按钮。