بهعنوان یک توسعهدهنده پایتون، اخیراً به یک مشکل عجیب برخوردم که در آن حلقههای کد من آنطور که انتظار داشتم تکرار نمیشوند. من تابعی داشتم که در فهرستی از محدودههای تاریخ تکرار میشد تا بررسی کنم آیا یک مهر زمانی در هر یک از محدودهها قرار دارد یا خیر.
کد من چیزی شبیه به این بود:
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)
]
به نظر می رسد که عبارت مولد رفتار غیرمنتظره ای را بین حلقه ها ایجاد می کند. با تحمیل ارزشیابی به یک لیست، دمدمی بودن را برطرف کرد.
بنابراین اگر تا به حال مشاهده کردید که حلقههایی در کد پایتون شما همانطور که انتظار میرود تکرار نمیشوند، عبارات مولد را که میتوانند باگهای ظریف را معرفی کنند، بررسی کنید. تبدیل آنها به فهرستها/تاپهای استاندارد راهی آسان برای رد کردن مشکلات تکرارکننده است.
اگر سوال دیگری داشتید من را در جریان بگذارید!