Sebagai pengembang Python, baru-baru ini saya mengalami masalah aneh di mana loop dalam kode saya tidak berulang seperti yang saya harapkan. Saya memiliki fungsi yang mengulangi daftar rentang tanggal untuk memeriksa apakah stempel waktu termasuk dalam rentang mana pun.
Kode saya terlihat seperti ini:
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)
)
Setelah beberapa proses debug, saya melihat masalahnya hilang ketika saya mengubah generate_ranges()
untuk mengembalikan daftar alih-alih ekspresi generator:
def generate_ranges():
return [
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
]
Tampaknya ekspresi generator menimbulkan beberapa perilaku tak terduga di antara loop. Dengan memaksakan evaluasi ke dalam sebuah daftar, hal ini menyelesaikan keanehan tersebut.
Jadi, jika Anda pernah melihat loop dalam kode Python Anda tidak berulang seperti yang diharapkan, periksa ekspresi generator apa pun yang dapat menimbulkan bug halus. Mengonversinya menjadi daftar/tupel standar adalah cara mudah untuk mengesampingkan masalah iterator.
Beri tahu saya jika Anda memiliki pertanyaan lain!