Definizione: Un generatore è come una normale funzione che genera un intervallo di valori utilizzando il dare la precedenza parola chiave. Restituisce un oggetto alla volta. Utilizza internamente un iteratore. Per accedere all'elemento successivo Il prossimo() viene utilizzata la funzione, oppure possiamo usarla per un ciclo continuo. Se proviamo ad accedere al valore fuori range, alza a Interrompi iterazione errore.
Vedremo qualche esempio per capire meglio
Ex: funzione generatore per range di valori
def range_fun(n):x = 0
mentre x < n:
rendimento x
x += 1
y = range_fun (3)
#chiama usando il ciclo for
print('Genera valori usando il metodo next()')
per i in range_fun(3):
stampa(i)
#call generator usando il metodo successivo
print('Genera valori usando il metodo for loop')
stampa (successivo (y))
stampa (successivo (y))
stampa (successivo (y))
print(next(y))#Stop L'eccezione di iterazione verrà sollevata
Ex: Funzione generatore per la serie di Fibonacci
def fib_fun(n):x, y = 0, 1
mentre x < n:
rendimento x
x, y = y, x + y
z = fib_fun(6) #oggetto generatore
print('Genera valori usando il metodo next()')
stampa(successivo(z))
stampa(successivo(z))
stampa(successivo(z))
stampa(successivo(z))
stampa(successivo(z))
stampa(successivo(z))
print('Genera valori usando il metodo for loop')
per io in fib_fun(6):
stampa(i)
Ex: Funzione generatore per la creazione di un intervallo di valori dati i valori iniziali e finali.
def mio_intervallo(inizio, fine):corrente = inizio
mentre attuale < end:
resa corrente
corrente +=1
print('Genera valori usando il metodo next()')
numeri = mio_intervallo(1,5)
print(successivo(numeri))
print(successivo(numeri))
print(successivo(numeri))
print(successivo(numeri))
print('Genera valori usando il metodo for loop')
per num in my_range(1,5):
stampa (numero)
Ex: Generatore per moltiplicare ogni numero (meno di un numero) per un numero
def gen_mulby_num(max,num):n = 0
mentre n < max:
resa n * num
n += 1
per i in gen_mulby_num(5,3):
stampa(i)
Ex: Generatore per trovare il cubo per l'intervallo di valori
def gen_mulby_num(max,num):n = 0
mentre n < max:
resa n * num
n += 1
per i in gen_mulby_num(5,3):
stampa(i)
Ex: generatori multipli: trova il quadrato dei numeri pari generati da un numero
Generatore 1: genera valori pari da un dato numero
Generatore 2: genera numeri quadrati dai valori del generatore1
def gen_even(m):n = 0
mentre n < m:
se n % 2 == 0:
resa n
n += 2
def gen_square(nums):
per num in num:
resa 2 * num
per n in gen_square(gen_even(15)):
stampa(n)
Ex: Generatori multipli: crea serie di fibnacci e aggiungi valore 10 ogni numero.
Generator1: genera serie di Fibonacci da un dato numero
Generator2: aggiungi ogni numero per 10 da generator1
def gen_fib(n):x, y = 0, 1
mentre x < n:
rendimento x
x, y = y, x + y
def gen_add_10(num):
per num in num:
rendimento 10 + num
per n in gen_add_10(gen_fib(5)):
stampa(n)
Comprensioni del generatore:
Le comprensioni del generatore sono simili alle comprensioni di elenco in cui l'elenco utilizza parentesi quadre; questo usa la parentesi normale.
Ex:
nums = (i per i in range(10))print(tipo(numeri))
print(lista(numeri))
Differenza tra generatore e funzione normale:
- Un generatore fornisce valori usando dare la precedenza parola chiave dove la funzione normale usa il ritorno parola chiave
- Il generatore si avvia da dove si è fermato quando chiamato la prossima volta. La funzione normale esegue tutte le istruzioni ogni volta.
- Il generatore salva la memoria in quanto restituisce un valore alla volta. Quindi possiamo usarlo per generare valori infiniti.
Conclusione:
Il generatore è molto utile quando gestiamo dati enormi/grandi. In un dato momento, contiene solo un singolo pezzo di dati anziché interi dati. Il concetto di generatori è considerato un concetto avanzato in Python.