首先,对不起标题,我找不到更好的。
下面的代码是我在Python程序中遇到的一个问题的最小化版本(我是一个新手)。
def onClick(i):
print "This is Button: " + str(i)
return
def start():
b = [0 for x in range(5)]
win = Tkinter.Tk()
for i in range(5):
b[i] = Tkinter.Button(win,height=10,width=100,command=lambda : onClick(i))
b[i].pack()
return
它的作用: 无论我按哪个按钮,它都会说“这是按钮:4”。
我想要的: 第一个按钮应该说“这是按钮:0”等等。
这是Python想要的行为吗?如果答案是肯定的,为什么会这样?我怎样才能修好它?
另一方面,这样做很好:
def start():
x = [0 for x in range(5)]
for i in range(5):
x[i] = lambda:onClick(i)
x[i]()
return
使用默认参数可避免后期绑定问题(否则在调用lambda函数时绑定
i
,而不是在创建该函数时绑定):相关问题 更多 >
编程相关推荐