আমার একটি কলব্যাক ফাংশন প্রয়োজন যা গুয়ির কয়েকটি ইভেন্টের সিরিজের জন্য প্রায় একই। কোন ইভেন্টটি এটি ডেকেছে তার উপর নির্ভর করে ফাংশনটি কিছুটা আলাদা আচরণ করবে। আমার কাছে একটি সাধারণ কেসের মতো মনে হয় তবে ল্যাম্বদা ফাংশনের এই অদ্ভুত আচরণটি আমি অনুধাবন করতে পারি না।
সুতরাং আমার নীচে নিম্নলিখিত সরলীকৃত কোড রয়েছে:
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()
তবে এটি একই সমস্যা আছে।