Función de enlace tkinter con variable en un bucle

Tengo este código para crear una serie de enlaces en un bucle:

from Tkinter import * keys = {0:'m', 1:'n', 2:'o'} def SomeFunc(event=None,number=11): print keys[number], number root = Tk() field = Canvas(root, height = 200, width = 200, bg = "gray") for i in range(2): root.bind("" % keys[i],lambda ev:SomeFunc(ev,i)) field.pack() root.mainloop() 

mi problema es que cuando SomeFunc ‘m’ o ‘n’, se llama a la función SomeFunc con vairable ‘i’ como argumento. Me gustaría que se llame con un 0 como argumento (el valor numérico ‘i’ tenía cuando se usó ‘bind’) cuando presiono ‘m’ y con 1 cuando presiono ‘n’. Se puede hacer esto?

Su problema aquí es que la variable i es capturada por la lambda , pero puede evitar eso creando una pequeña función auxiliar, por ejemplo:

 for i in range(2): def make_lambda(x): return lambda ev:SomeFunc(ev,x) root.bind("" % keys[i], make_lambda(i)) 

Esto crea un nuevo ámbito para cada enlace que cree, por lo que la ejecución del bucle for y el cambio de i durante el bucle no influyen en sus funciones ya lambda.