【发布时间】:2019-11-02 01:06:20
【问题描述】:
我最近遇到了一个问题,我在 .connect 的 pyqt 的 for 循环中使用 lambda 函数。这导致了 lambda 函数中的闭包问题,我能够使用 functools 解决它,但经过更多研究后,我发现我可以使用不需要导入 functools 的稍微不同的代码。
使用以下格式的示例代码:
for i in range(0,len(items)):
items[i].connect( ( lambda i: lambda: func(i) )(i) )
def func(i):
print('i value ' + str(i))
我不确定为什么会这样。
我试过了
for i in range(0,len(items)):
items[i].connect( lambda i=i: func(i) )
def func(i):
print('i value ' + str(i))
而这只给出了 i 的第一个值。第一个示例完全按照我的意愿工作,但我不明白它在做什么。据我了解,它返回一个在调用之前用 i 评估的函数,但是我不明白 lambda 括号外的 (i) 是做什么的。我也不明白为什么第二个例子对我不起作用。
任何帮助将不胜感激,谢谢。
【问题讨论】: