如何在python中存储传递给lambda函数的参数?

时间:2017-02-15 16:11:43

标签: python kivy

这里是python程序,它生成一个驱动器列表并相应地添加按钮,

    drives = win32api.GetLogicalDriveStrings()
    drives = (drives.split('\000')[:-1])
    for d in range(0,len(drives)):
        box.add_widget(Button(text=drives[d],on_press = lambda x: self.open_drive(s=drives[0+d])))

    self.add_widget(box)

def open_drive(self,s):
    print(str(s))

当我点击按钮它应该打印C:D:E:依此类推,但是它被卡在列表中的最后一个驱动器上,我如何将参数存储在该lambda函数中?

1 个答案:

答案 0 :(得分:0)

我的头疼,但你可以使用:

for d in range(0,len(drives)):
        box.add_widget(Button(text=drives[d],
                              on_press = (lambda d: lambda x: self.open_drive(s=drives[0+d]))(d))

这样您构建的lambda function会返回另一个lambda function,只有最后一个使用已知值作为参数传递lambda < strong>被称为循环的每个cicle :)