Función Lambda y scope variable.

Actualmente, mi código es así:

for control in self.controls(): self.connect(control, SIGNAL('clicked()'), lambda: self.button(control.objectName())) 

Cuando ejecuto mi código, mi función lambda toma el control para ser el último elemento en mi lista de elementos, que no es lo que espero que suceda.

Por extraño que parezca, cuando ejecuto manualmente cada bucle lambda , funciona bien para cada bucle, pero todavía tiene el mismo problema que antes al final:

 for control in self.controls(): func = lambda: self.button(control.objectName()) func() # Prints the correct output self.connect(control, SIGNAL('clicked()'), func) # When triggered, still breaks 

Mi función self.button() está trivialmente definida:

 def button(self, name): print name 

Verifiqué la singularidad de control y func cada bucle imprimiendo la salida de id(control) e id(func) y todos devolvieron números únicos. Aparte de eso, control.objectName() es el nombre de objeto correcto.

Tengo la sensación de que este es un problema de scope variable, ya que generalmente no uso lambda demasiada frecuencia en mi código. ¿Alguien ve algún error flagrante?

SPLAT.

 for control in self.controls(): self.connect(control, SIGNAL('clicked()'), lambda control=control: self.button(control.objectName()))