Concatenazione e Composizione di Iteratori
Scorri per mostrare il menu
Concatenazione e composizione di iteratori per la creazione di pipeline di dati efficienti in Python. Collegando tra loro semplici funzioni iteratore o generatori, è possibile elaborare i dati passo dopo passo, con ogni fase che trasforma o filtra i dati prima di passarli alla successiva. Questo approccio è particolarmente utile quando si desidera applicare più operazioni in sequenza, come filtrare elementi e poi trasformarli, oppure combinare dati provenienti da diverse fonti. Il video sopra mostra come utilizzare pipeline di generatori per mantenere il codice modulare ed efficiente in termini di memoria, evitando la creazione di liste intermedie.
Per vedere questo concetto in pratica, si consideri uno scenario in cui si dispone di una sequenza di numeri e si desidera filtrare i numeri pari, quindi elevare al quadrato quelli rimanenti. È possibile ottenere questo risultato concatenando due funzioni generatore: una per il filtraggio e una per la trasformazione. Questo approccio garantisce che ogni elemento venga elaborato solo quando necessario, rendendo il codice sia conciso che efficiente.
12345678910111213141516171819def filter_odds(numbers): for n in numbers: if n % 2 != 0: yield n def square_numbers(numbers): for n in numbers: yield n ** 2 # Original data data = range(10) # Chain the generators: first filter, then transform filtered = filter_odds(data) squared = square_numbers(filtered) # Collect results result = list(squared) print(result) # Output: [1, 9, 25, 49, 81]
La prima funzione, filter_odds, accetta un iterabile di numeri e restituisce solo quelli dispari. La seconda funzione, square_numbers, accetta un iterabile e restituisce il quadrato di ciascun numero. Passando l'output di filter_odds direttamente a square_numbers, si crea una pipeline: prima il filtraggio, poi la trasformazione dei dati. Il risultato finale viene raccolto in una lista e stampato, mostrando i quadrati di tutti i numeri dispari da 0 a 9.
Questo metodo è efficiente in termini di memoria perché ogni valore viene elaborato uno alla volta, invece di creare liste intermedie. Inoltre, mantiene il codice modulare, poiché ogni funzione generatore svolge un solo compito e può essere riutilizzata in diverse pipeline.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione