Dec
30

Por que seus loops Python podem não estar iterando corretamente

12/30/2023 03:17 PM de Admin em Python


Como desenvolvedor Python, recentemente encontrei um problema estranho em que os loops em meu código não estavam iterando como eu esperava. Eu tinha uma função que estava iterando em uma lista de intervalos de datas para verificar se um carimbo de data/hora estava dentro de algum dos intervalos.

Meu código era mais ou menos assim:

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)
  )
  • nenhuma impressão de "Segundo loop".

Após alguma depuração, percebi que o problema desapareceu quando alterei generate_ranges() para retornar uma lista em vez de uma expressão geradora:

def generate_ranges():
  return [
    {'start': date1, 'end': date2}
    for date1, date2 in zip(start_dates, end_dates) 
  ]

Parece que a expressão geradora estava introduzindo algum comportamento inesperado entre os loops. Ao forçar a avaliação em uma lista, resolveu a peculiaridade.

Portanto, se você vir loops em seu código Python que não estão iterando conforme o esperado, verifique se há alguma expressão geradora que possa estar introduzindo bugs sutis. Convertê-los em listas/tuplas padrão é uma maneira fácil de descartar problemas de iteradores.

Deixe-me saber se você tem alguma dúvida!


Seus pensamentos

Procurar
PATROCINADOR
CRIPTORELÓGIO
SIGA-NOS
últimos Tweets

Nova ferramenta adicionada: Calculadora de dimensões de zoom SVG.

PATROCINADOR