所以我想在循环中创建一堆函数来连接事件。 相关代码就是这样的:
for i in range(10):
#Create function for current index
tmp = lambda: self.do_something(i)
#and connect event to the function
event.connect(tmp)
出乎意料的是,(至少对我而言),当被调用时 - 所有函数都表现为i = 9。 使用list comprehention在ipython中测试相同的代码,它的行为方式相同:
l = [lambda:i for i in range(10)]
list(x() for x in l)
,输出为:
Out[15]: [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
实现以这种方式创建10种不同功能的目标的正确方法是什么?
答案 0 :(得分:1)
使用默认参数:
event.connect(func, lambda i=i: self.do_something(i))
由于默认参数是根据定义进行评估的,因此您需要进行设置。