最佳答案
我需要一个对于一系列 gui 事件几乎完全相同的回调函数。根据调用它的事件,该函数的行为将略有不同。对我来说似乎是个简单的案子,但我搞不懂这个奇怪的 Lambda 函数行为。
因此,我有以下简化的代码:
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()
但这也有同样的问题。