পাইথন লুপের ভেতরে ল্যাম্বডা ফাংশন তৈরি করলে লেট বাইন্ডিং (late binding) সমস্যা হয়। সব ল্যাম্বডা একই ভেরিয়েবল রেফার করে, ফলে সবই শেষ ভ্যালু দেখায়।
সমস্যা
# ভুল পদ্ধতি
lambdas = [lambda: i*i for i in range(1, 6)]
for f in lambdas:
print(f()) # সবই 25 প্রিন্ট করবে!
সমাধান ১: ডিফল্ট আর্গুমেন্ট ব্যবহার (কারিং/currying)
lambdas = [lambda i=i: i*i for i in range(1, 6)]
for f in lambdas:
print(f())
আউটপুট
1 4 9 16 25
সমাধান ২: হেল্পার ফাংশন ব্যবহার
def square(x):
return lambda: x*x
lambdas = [square(i) for i in [1, 2, 3, 4, 5]]
for f in lambdas:
print(f())
ব্যাখ্যা
ডিফল্ট আর্গুমেন্ট i=i দিয়ে বর্তমান i-এর ভ্যালু ল্যাম্বডার ডিফল্টে বাঁধা হয় (early binding)। হেল্পার ফাংশন নতুন স্কোপ তৈরি করে একই ফলাফল দেয়।