基于循环索引定义函数的正确方法?

时间:2016-05-11 11:10:17

标签: python python-3.x

所以我想在循环中创建一堆函数来连接事件。 相关代码就是这样的:

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种不同功能的目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

使用默认参数:

event.connect(func, lambda i=i: self.do_something(i))

由于默认参数是根据定义进行评估的,因此您需要进行设置。