Как разработчик Python, я недавно столкнулся со странной проблемой, когда циклы в моем коде выполнялись не так, как я ожидал. У меня была функция, которая перебирала список диапазонов дат, чтобы проверить, попадает ли временная метка в какой-либо из диапазонов.
Мой код выглядел примерно так:
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)
]
Кажется, выражение генератора вносило какое-то неожиданное поведение между циклами. Записав оценку в список, мы решили эту странность.
Поэтому, если вы когда-нибудь увидите, что циклы в вашем коде Python не повторяются должным образом, проверьте любые выражения генератора, которые могут привести к тонким ошибкам. Преобразование их в стандартные списки/кортежи — простой способ исключить проблемы с итераторами.
Дайте мне знать, если у вас есть еще вопросы!