Dec
30

Perché i tuoi loop Python potrebbero non funzionare correttamente

12/30/2023 03:17 PM di Admin in Python


Come sviluppatore Python, recentemente ho riscontrato uno strano problema in cui i loop nel mio codice non venivano ripetuti come previsto. Avevo una funzione che eseguiva l'iterazione su un elenco di intervalli di date per verificare se un timestamp rientrava in uno qualsiasi degli intervalli.

Il mio codice assomigliava a questo:

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)
  )
  • nessuna stampa del "Secondo ciclo".

Dopo un po' di debug, ho notato che il problema è scomparso quando ho modificato generate_ranges() per restituire un elenco anziché un'espressione del generatore:

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

Sembra che l'espressione del generatore introducesse un comportamento inaspettato tra i cicli. Forzando la valutazione in un elenco, è stata risolta la stranezza.

Quindi, se mai vedi che i loop nel tuo codice Python non si ripetono come previsto, controlla eventuali espressioni del generatore che potrebbero introdurre bug sottili. Convertirli in elenchi/tuple standard è un modo semplice per escludere problemi con gli iteratori.

Fatemi sapere se avete altre domande!


I tuoi pensieri

Ricerca
SPONSOR
CRITTOGRAFIA
SEGUICI
ultimi tweets

Nuovo strumento aggiunto: Calcolatore dimensione zoom SVG.

SPONSOR