generatore di Python
Funzioni e metodi Python
Michael Zippo
31.10.2021
Gli iteratori svolgono un ruolo importante in Python. Consentono di creare un oggetto su cui è possibile eseguire l’iterazione. è un buon modo per archiviare dati a cui è possibile accedere tramite un ciclo for in.
Il problema con gli iteratori è che ci vuole molto lavoro per crearne uno. Sono utili, ma devi scrivere molto codice per far funzionare uno. I generatori aiutano a risolvere questo problema.
In questa guida parleremo di cosa sono i generatori Python e perché dovresti usarli. Implementeremo anche un generatore in Python per aiutarti a capire come funzionano.
Senza ulteriori indugi, iniziamo!
Cos’è un generatore?
Un generatore è un modo semplice per creare un iteratore in Python. è una funzione che restituisce un oggetto su cui è possibile eseguire l’iterazione.
I generatori sono spesso chiamati zucchero sintattico. Questo perché non aggiungono necessariamente nuove funzionalità a Python. Aiutano a rendere il tuo codice più efficiente.
Come gli iteratori, puoi eseguire l’iterazione su un generatore solo una volta. Questo perché i generatori tengono traccia di quante volte sono stati ripetuti e non possono essere ripristinati.
Diamo un’occhiata a un iteratore Python:
L’81% dei partecipanti ha dichiarato di sentirsi più sicuro delle proprie prospettive di lavoro nel settore tecnologico dopo aver partecipato a un bootcamp. Fatti abbinare a un bootcamp oggi.
Il laureato medio del bootcamp ha trascorso meno di sei mesi nella transizione di carriera, dall’avvio di un bootcamp alla ricerca del primo lavoro.
Questo codice crea un iteratore chiamato Biscotti. Quando passi i dati attraverso questo iteratore, verrà trasformato in un oggetto iterabile. Ciò significa che è possibile scorrere i dati utilizzando un ciclo for in. Se stai guardando questo codice e pensi che sia davvero lungo, è perché lo è.
I generatori possono aiutarci ad abbreviare questo codice. Scriviamo un generatore per il nostro iteratore sopra:
Le dimensioni del nostro codice sono state drasticamente ridotte. Vediamo come funziona.
Un generatore è una funzione che ha una parola chiave yield invece di un’istruzione return. Le istruzioni Yield restituiscono un valore da una funzione.
La differenza tra un’istruzione yield e un’istruzione return è che un’istruzione return interrompe l’esecuzione di una funzione, mentre un’istruzione yield sospende la funzione e continua iterando.
Proviamo a ripetere la nostra semplice funzione generatore:
Il nostro codice restituisce:
Raspberry
Raspberry
…
Questo codice continua a ripetersi finché non fermiamo il nostro programma.Questo perché abbiamo usato un ciclo while
che viene eseguito per sempre. Questo non è molto utile nella maggior parte dei casi. Scriviamo un generatore che si ferma quando è stata eseguita un’azione.
Come scrivere un generatore Python
Abbiamo un elenco di cookie che vogliamo stampare sulla console. Questo elenco ha il seguente aspetto:
["Raspberry", "Choc-Chip", "Cinnamon", "Oat"]
Per stamparli sulla console, potremmo cre mangiato un semplice generatore. Apri un nuovo file Python e incolla il seguente codice:
Il nostro generatore esamina ogni cookie nell’elenco che specifichiamo e restituisce ogni cookie singolarmente. Questo generatore non funziona ancora. Dobbiamo usare un ciclo for per iterarci sopra:
Abbiamo definito un array chiamato cookie_list che memorizza un elenco di quattro cookie. Abbiamo quindi impostato un ciclo for che utilizza il nostro generatore per scorrere i valori in cookie_list
.
Per ogni iterazione nel nostro ciclo for, viene stampato l’oggetto generato alla console:
Raspberry
"Il Karma di carriera è entrato nella mia vita quando ne avevo più bisogno e mi ha aiutato rapidamente ad abbinarmi a un bootcamp. Due mesi dopo la laurea, ho trovato il mio lavoro da sogno in linea con i miei valori e obiettivi nella vita!"
Venus, Software Engineer presso Rockbot
Choc-Chip
Cannella
Avena
Ce l’abbiamo fatta! Questo generatore restituisce valori fino a quando ogni valore nella variabile cookie_list
è stato ripetuto.
I generatori hanno una gamma di casi d’uso. Diciamo che abbiamo un elenco di prezzi degli ordini che vogliamo sommare. Potremmo farlo usando il seguente codice:
Questo generatore manterrà un totale parziale del valore di tutti gli ordini in un elenco. Dopo che ogni articolo è stato ripetuto, il generatore produrrà il valore totale corrente degli ordini. Scriviamo un ciclo for che utilizzi il nostro generatore:
Il nostro codice restituisce:
Il nostro generatore ha calcolato il valore cumulativo di tutti gli ordini nella variabile order_list. Ogni iterazione sulla lista restituisce il nuovo valore cumulativo.
I generatori sono già più facili da scrivere rispetto a un iteratore. La nostra ricerca per scrivere codice più pulito non ha bisogno di fermarsi, grazie alle espressioni generatori.
La risposta di questo generatore è la stessa del nostro primo esempio. La nostra sintassi è significativamente più chiara.
è importante notare che quando si esegue l’iterazione su un generatore che è stato dichiarato utilizzando un’espressione del generatore, non lo si chiama come funzione. Il nostro generatore cookie_generator
non accetta alcun valore di input: contiene già il codice di cui ha bisogno per scorrere l’elenco cookie_list
.
Dovresti utilizzare la sintassi delle espressioni del generatore solo quando è necessario scrivere un generatore che esegua una funzione semplice. La stampa di un elenco di valori è un buon esempio; la moltiplicazione dei valori in un elenco per un numero specifico è un altro buon esempio.
Questo perché, sebbene la sintassi dell’espressione del generatore sia chiara, è progettata principalmente per espressioni di una riga. Se il tuo generatore utilizzerà più di una riga di codice, scrivilo come funzione generatore utilizzando la sintassi discussa in precedenza in questo articolo.