apa*_*apa 1 python lambda tkinter
在下面的代码中,我打算有两个按钮,当按下每个按钮时,分别将'0'和'1'打印到stdout.然而,当程序运行时,它们都打印'1',这是我在迭代中的最后一个值.为什么?
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()
Run Code Online (Sandbox Code Playgroud)
该i不是在当你创建它的拉姆达捕捉(为你想).相反,两个函数都返回i外部for循环,它在创建函数之后和运行之前发生变化.要捕获它,您可以使用默认值:
for i in range(0,2):
cmd = lambda i=i: sys.stdout.write(str(i))
tk.Button(text="print '%d'" % i,command=cmd).pack()
Run Code Online (Sandbox Code Playgroud)