scopo das funções lambda e seus parâmetro
Preciso de uma função de retorno de chamada que seja quase exatamente a mesma para uma série de eventos da GUI. A função se comportará de maneira ligeiramente diferente, dependendo de qual evento a chamou. Parece um caso simples para mim, mas não consigo descobrir esse comportamento estranho das funções lambd
Então, eu tenho o seguinte código simplificado abaixo:
def callback(msg):
print msg
#creating a list of function handles with an iterator
funcList=[]
for m in ('do', 're', 'mi'):
funcList.append(lambda: callback(m))
for f in funcList:
f()
#create one at a time
funcList=[]
funcList.append(lambda: callback('do'))
funcList.append(lambda: callback('re'))
funcList.append(lambda: callback('mi'))
for f in funcList:
f()
A saída deste código é:
mi
mi
mi
do
re
mi
Eu esperava
do
re
mi
do
re
mi
Por que o uso de um iterador estragou tudo?
Tentei usar uma cópia em profundidade:
import copy
funcList=[]
for m in ('do', 're', 'mi'):
funcList.append(lambda: callback(copy.deepcopy(m)))
for f in funcList:
f()
Mas isso tem o mesmo problema.