在下面的代码中,我打算有两个按钮,当每个按钮被按下时,“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()
Tags:
当您创建lambda时,
i
没有被捕获(如您所愿)。相反,这两个函数都引用外部for循环中的i
,该循环在函数创建之后和运行之前都会发生变化。要捕获它,可以使用默认值:我认为使用匿名函数只是为了给它取个名字有点奇怪。为什么不这样写呢?在
当然这是
On lambdas, capture, and mutability
一次又一次。。。在
相关问题 更多 >
编程相关推荐