在下面的代码中,我打算有两个按钮,当每个按钮被按下时,'0' 和 '1' 将分别打印到标准输出。但是,当程序运行时,它们都打印“1”,这是我在 for 迭代中的最后一个值。为什么?
import Tkinter as tk
import sys
root = tk.Tk()
for i in range(0,2):
cmd = lambda: sys.stdout.write(str(i))
tk.Button(text="print '%d'" % i,command=cmd).pack()
root.mainloop()
请您参考如下方法:
i 在您创建它时(如您所愿)未在 lambda 中捕获。相反,这两个函数都引用外部 for 循环中的 i,它在函数创建之后和运行之前发生变化。要捕获它,您可以使用默认值:
for i in range(0,2):
cmd = lambda i=i: sys.stdout.write(str(i))
tk.Button(text="print '%d'" % i,command=cmd).pack()
