Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Funzioni Generatrici | Specifica del Valore di Ritorno della Funzione
Tutorial Sulle Funzioni in Python
Sezione 4. Capitolo 4
single

single

Funzioni Generatrici

Scorri per mostrare il menu

Note
Definizione

Una funzione generatrice è un tipo speciale di funzione che utilizza la parola chiave yield invece di return per generare una sequenza di valori. Quando una funzione generatrice viene chiamata, restituisce un oggetto iteratore, che può essere iterato per recuperare i valori uno alla volta.

Il principale vantaggio delle funzioni generatrici è la loro efficienza nella gestione della memoria. Invece di generare l'intera sequenza in anticipo e memorizzarla in memoria, i generatori producono i valori al volo quando sono necessari.

Come funziona yield

A differenza di return, che termina completamente la funzione, yield mette in pausa la funzione e ne salva lo stato. Alla chiamata successiva di next(), il generatore riprende esattamente dal punto in cui era stato interrotto:

12345678910
def count_up(start, stop): while start <= stop: yield start # Pause and return the current value start += 1 # Resume from here on the next call counter = count_up(1, 3) print(next(counter)) # 1 print(next(counter)) # 2 print(next(counter)) # 3

È anche possibile iterare su un generatore utilizzando un ciclo for – chiama automaticamente next() fino a quando il generatore non è esaurito:

1234567
def count_up(start, stop): while start <= stop: yield start start += 1 for value in count_up(1, 5): print(value) # 1, 2, 3, 4, 5
Note
Nota

Quando un generatore è esaurito (nessun valore da restituire), chiamare next() su di esso genererà un errore StopIteration. Un ciclo for gestisce automaticamente questa situazione.

Compito

Scorri per iniziare a programmare

Implementare una funzione generatore even_numbers che produca numeri pari in un intervallo specificato.

  1. Definire una funzione generatore even_numbers che accetti due parametri: start e stop.
  2. Utilizzare un ciclo while per iterare finché start è minore o uguale a stop.
  3. Utilizzare yield per restituire start solo se è pari (divisibile per 2).
  4. Incrementare start di 1 dopo ogni iterazione.
  5. Utilizzare un ciclo for per stampare tutti i valori generati.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 4
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt