일련의 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()
그러나 이것은 같은 문제가 있습니다.