single
Generator Infiniti
Scorri per mostrare il menu
Ricorda che yield mette in pausa un generatore e lo riprende alla successiva chiamata di next(). Finora, i generatori che hai visto avevano un punto di arresto chiaro. Tuttavia, i generatori diventano particolarmente potenti quando vengono combinati con un ciclo infinito – producendo valori indefinitamente senza mai memorizzarli in memoria.
Generatori infiniti con while True
Utilizzare un ciclo while True all'interno di un generatore crea una sequenza infinita – qualcosa che sarebbe impossibile da memorizzare come lista. Il generatore produce il valore successivo solo quando viene chiamato next():
1234567891011def counter(): count = 1 while True: # Runs forever yield count # Return current value and pause count += 1 # Resume from here on the next call gen = counter() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3
Non importa quante volte chiami next(), il generatore avrà sempre un nuovo valore pronto – non anticipa mai né memorizza valori in memoria.
Controllo di un generatore infinito
Poiché il generatore continua all'infinito, è necessario controllare quanti valori recuperare. Il modo più comune è utilizzare un ciclo for con range():
12345678910def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Non iterare mai su un generatore infinito con un semplice ciclo for senza una condizione di arresto: continuerà all'infinito e potrebbe bloccare il programma.
Scorri per iniziare a programmare
Generazione di ID utente univoci utilizzando una funzione generatrice infinita. La funzione id_generator() deve produrre continuamente identificatori come 'ID_1', 'ID_2', ecc.
- Inizializzare la variabile
countcon il valore 1, poiché gli identificatori partono da 1. - Utilizzare un ciclo
whileinfinito per generare continuamente identificatori. - Utilizzare
yieldper restituire l'identificatore corrente nel formatof'ID_{count}'. - Incrementare
countdi 1 dopo ogni iterazione. - Inizializzare l'oggetto generatore
id_genchiamandoid_generator().
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione