Funzioni Generatrici
Una funzione generatrice è un tipo speciale di funzione che utilizza la parola chiave yield
invece di return
per generare una sequenza di valori. Quando una funzione generatrice viene chiamata, restituisce un oggetto iteratore, che può essere iterato per recuperare i valori uno alla volta.
Il principale vantaggio delle funzioni generatrici è la loro efficienza nella gestione della memoria. Le funzioni generatrici producono i valori al momento del bisogno, invece di generare l'intera sequenza in anticipo. Questo le rende efficienti in termini di memoria, soprattutto quando si lavora con grandi insiemi di dati o sequenze infinite.
Considera un semplice esempio di generatore. Questa funzione restituisce i login uno alla volta dalla lista fornita:
12345678910111213141516def unique_logins_from_list(login_list): # Iterate over each login in the list for login in login_list: yield login # `yield` the current login # A predefined list of available logins login_list = ["user1", "user2", "user3", "user4", "user5"] # Creating a generator instance from the login list login_generator = unique_logins_from_list(login_list) # Generate and print 5 logins, one at a time for _ in range(5): # Each call to `next()` gives the next login print(next(login_generator))
Il principio di un generatore è che consente di restituire i valori uno alla volta utilizzando la parola chiave yield
, senza memorizzarli tutti in memoria contemporaneamente. Nel nostro esempio, il generatore unique_logins_from_list
itera attraverso la lista di login, restituendo ciascuno tramite yield
e si mette in pausa in quel punto. Quando viene chiamato next()
, il generatore riprende da dove si era interrotto, producendo i valori in modo efficiente senza la necessità di memorizzare l'intera lista in memoria simultaneamente. Questo rende i generatori particolarmente utili per la gestione di grandi insiemi di dati o flussi di dati.
Swipe to start coding
Generare ID utente univoci utilizzando una funzione generatore. La funzione id_generator()
deve produrre continuamente identificatori come "ID_1"
, "ID_2"
, ecc.
- Inizializzare la variabile
count
con il valore 1, poiché gli identificatori partono da 1. - Utilizzare un ciclo
while
infinito per generare continuamente identificatori. - Utilizzare
yield
per restituire l'identificatore corrente nel formatof"ID_{count}"
. - Incrementare
count
di 1 dopo ogni iterazione. - Inizializzare l'oggetto generatore
id_gen
chiamandoid_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
Can you explain how the generator resumes execution after each yield?
What happens if I call next() more times than there are items in the list?
Can you show a real-world scenario where using a generator is better than a regular function?
Awesome!
Completion rate improved to 4.35
Funzioni Generatrici
Scorri per mostrare il menu
Una funzione generatrice è un tipo speciale di funzione che utilizza la parola chiave yield
invece di return
per generare una sequenza di valori. Quando una funzione generatrice viene chiamata, restituisce un oggetto iteratore, che può essere iterato per recuperare i valori uno alla volta.
Il principale vantaggio delle funzioni generatrici è la loro efficienza nella gestione della memoria. Le funzioni generatrici producono i valori al momento del bisogno, invece di generare l'intera sequenza in anticipo. Questo le rende efficienti in termini di memoria, soprattutto quando si lavora con grandi insiemi di dati o sequenze infinite.
Considera un semplice esempio di generatore. Questa funzione restituisce i login uno alla volta dalla lista fornita:
12345678910111213141516def unique_logins_from_list(login_list): # Iterate over each login in the list for login in login_list: yield login # `yield` the current login # A predefined list of available logins login_list = ["user1", "user2", "user3", "user4", "user5"] # Creating a generator instance from the login list login_generator = unique_logins_from_list(login_list) # Generate and print 5 logins, one at a time for _ in range(5): # Each call to `next()` gives the next login print(next(login_generator))
Il principio di un generatore è che consente di restituire i valori uno alla volta utilizzando la parola chiave yield
, senza memorizzarli tutti in memoria contemporaneamente. Nel nostro esempio, il generatore unique_logins_from_list
itera attraverso la lista di login, restituendo ciascuno tramite yield
e si mette in pausa in quel punto. Quando viene chiamato next()
, il generatore riprende da dove si era interrotto, producendo i valori in modo efficiente senza la necessità di memorizzare l'intera lista in memoria simultaneamente. Questo rende i generatori particolarmente utili per la gestione di grandi insiemi di dati o flussi di dati.
Swipe to start coding
Generare ID utente univoci utilizzando una funzione generatore. La funzione id_generator()
deve produrre continuamente identificatori come "ID_1"
, "ID_2"
, ecc.
- Inizializzare la variabile
count
con il valore 1, poiché gli identificatori partono da 1. - Utilizzare un ciclo
while
infinito per generare continuamente identificatori. - Utilizzare
yield
per restituire l'identificatore corrente nel formatof"ID_{count}"
. - Incrementare
count
di 1 dopo ogni iterazione. - Inizializzare l'oggetto generatore
id_gen
chiamandoid_generator()
.
Soluzione
Grazie per i tuoi commenti!
single