Bir dizi gui olayı için neredeyse tamamen aynı olan bir geri arama işlevine ihtiyacım var. İşlev, onu çağıran olaya bağlı olarak biraz farklı davranacaktır. Bana basit bir durum gibi görünüyor, ancak lambda fonksiyonlarının bu garip davranışını çözemiyorum.
Bu yüzden aşağıdaki basitleştirilmiş koda sahibim:
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()
Bu kodun çıktısı:
mi
mi
mi
do
re
mi
Tahmin etmiştim:
do
re
mi
do
re
mi
Yineleyici kullanmak işleri neden alt üst etti?
Deepcopy kullanmayı denedim:
import copy
funcList=[]
for m in ('do', 're', 'mi'):
funcList.append(lambda: callback(copy.deepcopy(m)))
for f in funcList:
f()
Ama bunda da aynı sorun var.