generatore di Python

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:

2.3

4.8

6,75

12,75

20,25

22.4

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.

Come fare per Scrivi un’espressione generatore

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.

Espressioni generatori sono simili alle list comprehensions. Le espressioni del generatore producono un elemento alla volta, come un generatore. Questo è diverso da una comprensione di elenco che produce un intero elenco, tutto in una volta.

Scriviamo un generatore per il nostro esempio di cookie:

Noi definito un elenco di cookie nella variabile cookie_list. Quindi creiamo un’espressione generatore. Questa espressione utilizza la sintassi per le comprensioni di elenco ma con una grande differenza: le comprensioni di elenco sono definite tra parentesi quadre, mentre i generatori sono definiti tra parentesi tonde.

Creiamo un ciclo for che itera su l’espressione:

Il nostro codice restituisce:

Lampo

Cioccolato

Cannella

Avena

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.

Perché vengono utilizzati i generatori?

Il motivo principale per cui vengono utilizzati i generatori è che sono più concisi degli iteratori.

I generatori sono come una funzione e non è necessaria alcuna istruzione __init__, __iter__ o __next__ per funzionare. Questo è diverso da un iteratore che richiede tutte e tre queste istruzioni. Questo comportamento significa che puoi implementare un generatore in un numero significativamente inferiore di righe di codice rispetto a quanto potresti se stessi scrivendo un iteratore.

Inoltre, i generatori sono efficienti nell’utilizzo della memoria. I generatori producono solo un elemento alla volta. Non creano un’intera sequenza in memoria prima di restituire un risultato. Ciò rende generatori molto pratici se hai bisogno di iterare su un lungo elenco di dati.

Il modo in cui funziona è che gli iteratori utilizzano un metodo di valutazione pigro. Generano solo l’elemento successivo di un oggetto iterabile ct quando viene richiesto quell’elemento.

Conclusione (e sfida)

I generatori ti permettono di creare un iteratore più Pythonico.

I generatori lo rendono facile per scrivere oggetti utilizzando il protocollo iteratore senza dover scrivere istruzioni __init__, __iter__ o __next__. I generatori sono definiti come funzioni. Usano la dichiarazione yield per arrestare un generatore e restituire un valore al programma principale prima di tornare alle sue normali operazioni.

Se stai cercando una sfida, ecco alcune idee:

  • Scrivi un generatore che inverte una stringa.
  • Scrivi un generatore che restituisca solo valori che contengono una parola specifica da un elenco di valori.
  • Scrivi un generatore che moltiplichi ogni numero in un elenco per due.

Per ulteriori letture, dai un’occhiata al nostro tutorial su come scrivi e usa gli iteratori Python. Ora sei pronto per iniziare a lavorare con i generatori in Python come un esperto!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method