Dec
30

Pourquoi vos boucles Python peuvent ne pas itérer correctement

12/30/2023 03:17 PM par Admin dans Python


En tant que développeur Python, j'ai récemment rencontré un problème étrange où les boucles de mon code n'étaient pas itérées comme je m'y attendais. J'avais une fonction qui parcourait une liste de plages de dates pour vérifier si un horodatage se situait dans l'une des plages.

Mon code ressemblait à ceci :

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)
  )
  • aucune impression de "Deuxième boucle".

Après quelques débogages, j'ai remarqué que le problème avait disparu lorsque j'ai modifié generate_ranges() pour renvoyer une liste au lieu d'une expression génératrice :

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

Il semble que l'expression du générateur introduisait un comportement inattendu entre les boucles. En forçant l’évaluation dans une liste, cela a résolu la bizarrerie.

Donc, si jamais vous voyez des boucles dans votre code Python qui ne s'itèrent pas comme prévu, recherchez les expressions génératrices qui pourraient introduire des bogues subtils. Les convertir en listes/tuples standard est un moyen simple d'exclure les problèmes d'itérateur.

Faites-moi savoir si vous avez d'autres questions !


Tes pensées

Rechercher
PARRAINER
CRYPTOWATCH
SUIVEZ NOUS
derniers tweets

Nouvel outil ajouté : Calculateur de dimensions de zoom SVG.

PARRAINER

Snow: ON
Snow: ON