2017-02-15 3 views
0

здесь питон программа, которая производит список дисков и добавляет кнопки соответственно,Как сохранить параметр, переданный функции лямбда в 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: и так далее, но он застрял на последний диск в списке, как я могу сохранить параметр в этой лямбда-функции?

ответ

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который называется каждой ячейкой петли :)

Смежные вопросы