পাইথন ডেভেলপার হিসাবে, আমি সম্প্রতি একটি অদ্ভুত সমস্যা আঘাত করেছি যেখানে আমার কোডের লুপগুলি আমার প্রত্যাশা অনুযায়ী পুনরাবৃত্তি হচ্ছিল না। আমার কাছে একটি ফাংশন ছিল যা তারিখের ব্যাপ্তির একটি তালিকার উপর পুনরাবৃত্তি করছিল তা পরীক্ষা করার জন্য টাইমস্ট্যাম্প যে কোনো রেঞ্জের মধ্যে পড়েছিল কিনা।
আমার কোড এই মত কিছু লাগছিল:
def check_timestamp(timestamp):
date_ranges = generate_ranges()
for range in date_ranges:
print("First loop")
for range in date_ranges:
print("Second loop")
def generate_ranges():
return (
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
)
কিছু ডিবাগ করার পরে, আমি লক্ষ্য করেছি যে আমি জেনারেটর এক্সপ্রেশনের পরিবর্তে একটি তালিকা ফেরাতে generate_ranges()
পরিবর্তন করলে সমস্যাটি অদৃশ্য হয়ে গেছে:
def generate_ranges():
return [
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
]
মনে হচ্ছে জেনারেটর এক্সপ্রেশন লুপগুলির মধ্যে কিছু অপ্রত্যাশিত আচরণ প্রবর্তন করছে। একটি তালিকায় মূল্যায়ন জোরপূর্বক করে, এটি বিভ্রান্তির সমাধান করেছে।
সুতরাং আপনি যদি কখনও আপনার পাইথন কোডে লুপগুলি প্রত্যাশিত হিসাবে পুনরাবৃত্তি না করতে দেখেন, তবে এমন কোনও জেনারেটর এক্সপ্রেশন পরীক্ষা করুন যা সূক্ষ্ম বাগগুলি প্রবর্তন করতে পারে। এগুলিকে স্ট্যান্ডার্ড তালিকা/টুপলে রূপান্তর করা পুনরাবৃত্তিকারী সমস্যাগুলিকে বাতিল করার একটি সহজ উপায়।
অাপনার যদি অারো কোন প্রশ্ন থাকে তাহলে অামাকে জানান!