मुझे एक कॉलबैक फ़ंक्शन की आवश्यकता है जो लगभग एक ही तरह के गुई घटनाओं की श्रृंखला के लिए है। फ़ंक्शन किस इवेंट को बुलाता है, उसके आधार पर फ़ंक्शन थोड़ा अलग तरीके से व्यवहार करेगा। मेरे लिए एक साधारण मामले की तरह लगता है, लेकिन मैं लंबोदर कार्यों के इस अजीब व्यवहार का पता नहीं लगा सकता।
तो मेरे पास निम्न सरलीकृत कोड है:
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
क्यों एक iterator गड़बड़ चीजों का उपयोग कर रहा है?
मैंने एक डीपस्कोपी का उपयोग करने की कोशिश की है:
import copy
funcList=[]
for m in ('do', 're', 'mi'):
funcList.append(lambda: callback(copy.deepcopy(m)))
for f in funcList:
f()
लेकिन इसमें भी यही समस्या है।