Generatori Python 101
Python è un linguaggio di programmazione versatile che consente una codifica efficiente ed efficace con varie funzionalità, inclusi i generatori Python. I generatori in Python sono funzioni che producono una sequenza di risultati invece di un singolo valore. Questa sequenza di valori viene creata pigramente
, il che significa che il valore successivo viene generato solo quando richiesto e il valore precedente viene scartato, rendendolo efficiente in termini di memoria. In questo blog esploreremo in dettaglio il concetto di generatori, come crearli e come usarli nei programmi Python.
Cosa sono i generatori di Python?
I generatori di Python sono iterabili, il che significa che possono essere usati nei loop. Un generatore viene creato utilizzando una funzione che contiene un'istruzione yield anziché un'istruzione return. Quando invochiamo una funzione generatore, restituisce un oggetto iteratore, che può essere utilizzato per iterare sulla sequenza di valori generati dal generatore. L'istruzione yield crea ogni valore di sequenza e la funzione del generatore viene messa in pausa finché non viene richiesto il valore successivo.
Creazione di un generatore in Python
Creare un generatore in Python è facile. Tutto quello che devi fare è definire una funzione che contenga un'istruzione yield. Creiamo un semplice generatore che genera una sequenza di numeri.
def number_sequence(n):
i = 0
while i < n:
yield i
i += 1
for i in number_sequence(5):
print(i)
0 1 2 3 4
Funzionamento di un generatore in Python
Quando viene chiamata una funzione generatore, restituisce un oggetto iteratore, che può essere utilizzato per scorrere la sequenza di valori generati dal generatore. L' yieldistruzione viene utilizzata per generare ogni valore della sequenza e la funzione del generatore viene messa in pausa fino a quando non viene richiesto il valore successivo. Vediamo come funziona.
def number_sequence(n):
i = 0
while i < n:
yield i
i += 1
seq = number_sequence(5)
print(next(seq)) # prints 0
print(next(seq)) # prints 1
print(next(seq)) # prints 2
print(next(seq)) # prints 3
print(next(seq)) # prints 4
Output:
0
1
2
3
4
Esempi di generatori Python
Ora che abbiamo una comprensione di cosa sono i generatori e dei loro vantaggi, diamo un'occhiata ad alcuni esempi di generatori Python.
- Generatore di sequenze di Fibonacci:
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
def file_reader(filename):
with open(filename, 'r') as file:
for line in file:
yield line
3. Controgeneratore:
def counter(start=0, step=1):
n = start
while True:
yield n
n += step
Vantaggi dell'utilizzo dei generatori Python
I vantaggi dell'utilizzo dei generatori Python hanno diversi vantaggi rispetto ad altri metodi di generazione di sequenze di valori.
- Efficienza della memoria: i generatori sono efficienti in termini di memoria perché generano valori al volo invece di generarli e archiviarli in memoria.
- Calcolo efficiente: i generatori sono anche efficienti dal punto di vista computazionale perché generano solo i valori richiesti. Questo li rende più veloci ed efficienti rispetto ad altri metodi di generazione di sequenze.
- Sequenze infinite: i generatori possono anche generare sequenze infinite di valori, cosa impossibile con altri metodi di generazione di sequenze.
- Valutazione pigra: i generatori utilizzano la valutazione pigra, il che significa che valutano un'espressione solo quando richiesto, consentendo un uso efficiente delle risorse.
- Capacità di concatenare iteratori: i generatori possono essere concatenati insieme per creare sequenze complesse di valori, consentendo flessibilità nella generazione di sequenze.
- Stateful: i generatori aiutano a mantenere lo stato tra le chiamate, consentendo la generazione di sequenze complesse con il minimo sforzo.
- Riduzione del codice boilerplate : i generatori possono ridurre il codice boilerplate richiesto per generare valori di sequenza, semplificando la lettura e la manutenzione del codice.
I generatori di Python sono potenti strumenti in grado di generare sequenze di valori in modo efficiente e pigro. I generatori sono efficienti in termini di memoria, computazionalmente efficienti e facili da usare. Possono generare infinite sequenze di affari ed essere concatenati insieme per creare arrangiamenti complessi. I generatori sono una parte fondamentale del linguaggio Python e sono ampiamente utilizzati in molte librerie e framework Python. L'uso di generatori nel tuo codice può rendere il tuo codice più leggibile e gestibile ed è considerato Pythonic.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































