一連のGUIイベントとほぼ同じコールバック関数が必要です。関数は、どのイベントがそれを呼び出したかによって、わずかに異なる動作をします。私には単純なケースのように思えますが、ラムダ関数のこの奇妙な動作を理解することはできません。
したがって、以下の簡略化されたコードがあります。
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()
このコードの出力は次のとおりです。
mi
mi
mi
do
re
mi
私は期待しました:
do
re
mi
do
re
mi
なぜイテレータを使用すると物事が台無しになったのですか?
ディープコピーを使用してみました:
import copy
funcList=[]
for m in ('do', 're', 'mi'):
funcList.append(lambda: callback(copy.deepcopy(m)))
for f in funcList:
f()
しかし、これには同じ問題があります。