Cosa sono i generatori in Python e come usarli?



Scopri cosa sono i generatori in Python insieme ai vantaggi. Impara anche come crearli e usarli insieme a vari casi d'uso.

La generazione di iterabili o oggetti che consentono di superarli è considerata un'attività gravosa. Ma in , l'implementazione di questo doloroso compito diventa davvero semplice. Quindi andiamo avanti e diamo uno sguardo più da vicino ai generatori in Python.

Ecco un elenco di tutti gli argomenti trattati in questo articolo:





Quindi iniziamo. :)

Cosa sono i generatori in Python?

I generatori sono fondamentalmente funzioni che restituiscono oggetti o elementi attraversabili. Queste funzioni non producono tutti gli articoli in una volta, ma li producono uno alla volta e solo quando richiesto. Ogni volta che il file è incluso per iterare su un insieme di elementi, viene eseguita una funzione di generatore. I generatori hanno anche una serie di vantaggi.



Vantaggi dell'utilizzo dei generatori

  • Senza generatori in Python, produrre iterabili è estremamente difficile e lungo.

  • Generatori facili da implementare in quanto implementano automaticamente __iter __ (), __next __ () e StopIteration che altrimenti devono essere specificati esplicitamente.



  • La memoria viene salvata man mano che gli articoli vengono prodotti come quando richiesto, a differenza del normale . Questo fatto diventa molto importante quando è necessario creare un numero enorme di iteratori. Questo è anche considerato il più grande vantaggio dei generatori.

  • Può essere utilizzato per produrre un numero infinito di articoli.

  • Possono anche essere utilizzati per pipeline di una serie di operazioni

Funzioni normali vs funzioni del generatore:

I generatori in Python vengono creati proprio come crei tu utilizzando la parola chiave 'def'. Tuttavia, le funzioni del generatore utilizzano la parola chiave yield invece di return. Questo viene fatto per notificare all'interprete che questo è un iteratore. Non solo, le funzioni del generatore vengono eseguite quando viene chiamata la funzione next () e non per nome come nel caso delle normali funzioni. Considera il seguente esempio per capirlo meglio:

ESEMPIO:

def func (a): produce a a = [1,2,3] b = func (a) next (b)

PRODUZIONE: [1, 2, 3]

Come puoi vedere, nell'output sopra, func () utilizza la parola chiave yield e la funzione successiva per la sua esecuzione. Ma, per il normale funzionamento, avrai bisogno della seguente parte di codice:

ESEMPIO:

def func (a): restituisce a a = [1,2,3] func (a)

PRODUZIONE: [1, 2, 3]

Se guardi l'esempio sopra, potresti chiederti perché usare una funzione Generator quando anche la funzione normale restituisce lo stesso output. Quindi andiamo avanti e vediamo come utilizzare i generatori in Python.

come invertire un numero

Utilizzo delle funzioni del generatore:

Come accennato in precedenza, i generatori in Python producono iterabili uno alla volta. Dai un'occhiata al seguente esempio:

ESEMPIO:

def myfunc (a): while a> = 3: produce a a = a + 1 b = myfunc (a) print (b) next (b)

Quando esegui la seguente funzione, vedrai il seguente output:

PRODUZIONE: 4

Qui, un oggetto iterabile è stato restituito soddisfacendo la condizione while. Dopo l'esecuzione, il controllo viene trasferito al chiamante. Nel caso siano necessari più elementi, la stessa funzione deve essere eseguita di nuovo chiamando la funzione next ().

successivo (b)

PRODUZIONE: 5

Su ulteriori esecuzioni, la funzione restituirà 6,7, ecc. Le funzioni del generatore in Python implementano automaticamente i metodi __iter __ () e __next __ (). Pertanto, puoi iterare sugli oggetti semplicemente usando il metodo next (). Quando la generazione dell'elemento dovrebbe terminare, le funzioni del generatore implementano il StopIteration internamente senza dover preoccupare il chiamante. Ecco un altro esempio di questo:

ESEMPIO:

a = 2 def myfunc (a): mentre a> = 0: produce a a - = 1 b = myfunc (a) print (b) next (b)

PRODUZIONE:

StopIteration-Generators in Python-EdurekaL'immagine sopra mostra l'esecuzione del nostro programma richiesto il numero di volte. Se provi a chiamare di nuovo la funzione successiva, restituisce un messaggio raffigurante StopIteration è stato implementato. Se provi a farlo con le normali funzioni, i valori restituiti non cambieranno o non verranno ripetuti. Dai un'occhiata all'esempio qui sotto:

ESEMPIO:

def z (): n = 1 rendimento n n = n + 3 rendimento n p = z () successivo (p)

PRODUZIONE:

Generatori con loop:

Nel caso in cui desideri eseguire la stessa funzione contemporaneamente, puoi utilizzare il ciclo 'for'. Questo ciclo aiuta a scorrere gli oggetti e dopo tutte le implementazioni esegue StopIteration.

ESEMPIO:

def z (): n = 1 resa n n = n + 3 resa n per x in z (): print (x)

PRODUZIONE:

uno
4

È inoltre possibile specificare espressioni per generare oggetti iterabili.

Espressioni del generatore:

Puoi anche usare espressioni insieme al ciclo for per produrre iteratori. Questo di solito rende gli iterabili di generazione molto facili. L'espressione del generatore assomiglia a comprensioni di elenchi e simili funzioni lambda , le espressioni del generatore creano funzioni del generatore anonimo.

Dai un'occhiata all'esempio qui sotto:

ESEMPIO:

a = range (6) print ('List Comprehension', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 per x in a) print (c) per y in c: print (y)

PRODUZIONE:

Comprensione elenco: [2, 3, 4, 5, 6, 7]

Espressione del generatore:

2
3
4
5
6

Come puoi vedere, nell'output sopra, la prima espressione è una lista di comprensione che è specificata tra parentesi []. La comprensione dell'elenco produce l'elenco completo degli elementi contemporaneamente. La successiva è un'espressione del generatore che restituisce gli stessi elementi ma uno alla volta. Viene specificato utilizzando le parentesi ().


Generatorele funzioni possono essere utilizzate anche all'interno di altre funzioni.Per esempio:

ESEMPIO:

a = range (6) print ('Generator expression', end = ': n') c = (x + 2 for x in a) print (c) print (min (c))

PRODUZIONE:

Espressione del generatore
2

Il programma precedente stampa il valore minimo quando l'espressione precedente applicata ai valori di a.

Casi d'uso:

Usiamo i generatori in per:

  • Genera serie di Fibonacci
  • Generazione di numeri

Generazione della serie di Fibonacci:

La serie di Fibonacci, come tutti sappiamo, è una serie di numeri in cui ogni numero è la somma di due numeri precedenti. I primi due numeri sono 0 e 1. Ecco un programma generatore per generare le serie di Fibonacci:

ESEMPIO:

def fibo (): primo, secondo = 0,1 mentre True: restituisce primo primo, secondo = secondo, primo + secondo per x in fibo (): se x> 50: break print (x, end = '')

PRODUZIONE:

0 1 1 2 3 5 8 13 21 34

L'output sopra mostra la serie di Fibonacci con valori inferiori a 50. Diamo ora un'occhiata a come generare un elenco di numeri.

struttura di base del programma Java

Generazione di numeri:

Nel caso in cui desideri generare numeri di elenco specificati, puoi farlo utilizzando le funzioni del generatore. Dai un'occhiata al seguente esempio:

ESEMPIO:

a = intervallo (10) b = (x per x in a) print (b) per y in b: print (y)

PRODUZIONE:

0
uno
2
3
4
5
6
7
8
9

ESEMPIO:

a = range (2,10,2) b = (x for x in a) print (b) for y in b: print (y)

PRODUZIONE:


2
4
6
8

Il programma sopra ha restituito numeri pari da 2 a 10. Questo ci porta alla fine di questo articolo sui generatori in Python. Spero tu abbia capito tutti gli argomenti.

Assicurati di esercitarti il ​​più possibile e di ripristinare la tua esperienza.

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questo blog 'Generatori in Python' e ti risponderemo il prima possibile.

Per ottenere una conoscenza approfondita di Python e delle sue varie applicazioni, puoi iscriverti a live con supporto 24 ore su 24, 7 giorni su 7 e accesso a vita.