Dec
30

Почему ваши циклы Python могут выполняться неправильно

12/30/2023 03:17 PM по Admin в Python


Как разработчик 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 не повторяются должным образом, проверьте любые выражения генератора, которые могут привести к тонким ошибкам. Преобразование их в стандартные списки/кортежи — простой способ исключить проблемы с итераторами.

Дайте мне знать, если у вас есть еще вопросы!


Твои мысли

Поиск
СПОНСОР
КРИПТОВАТЧ
ПОДПИСЫВАЙТЕСЬ НА НАС
ОБЪЯВЛЕНИЯ

Добавлен новый инструмент: Калькулятор размеров масштабирования SVG.

СПОНСОР

Snow: ON
Snow: ON