在以下代码中,两种构造按钮的方式不同:
from Tkinter import *
def buildButton1():
root = Tk()
Button( root, command = lambda : foo(1) ).pack()
Button( root, command = lambda : foo(2) ).pack()
def buildButton2():
root = Tk()
buttons = ( Button( root, command = lambda : foo(i) ) for i in range(2) )
map( lambda button : button.pack(), buttons )
def foo( number ):
print number
这两种方法都使 Tkinter 窗口具有两个表面上相同的按钮布局,但在第二个示例中——如果我们添加 50 个按钮而不是 2,这似乎更简洁——传递给 foo 的值是最后一次迭代的 i。
所以在这种情况下,按下任何用 buildButton2 制作的按钮都会打印 1,而 buildButton1 的按钮分别打印 0 和 1。为什么有区别?有没有办法让 buildButton2 按预期工作?
编辑 有人指出,这是一个重复的问题,构造这个更正确的方法是写:
buttons = ( Button( root, command = lambda i=i : foo(i) ) for i in range(2) )
这给出了预期的结果。多谢你们!