Concatenazione e Composizione di Iteratori
Scorri per mostrare il menu
Concatenazione e composizione di iteratori consentono di costruire potenti pipeline di dati in Python. Collegando insieme semplici funzioni iteratore o generatore, è 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 gli elementi e poi trasformarli, oppure combinare dati provenienti da diverse fonti. Il video sopra illustra come sia possibile utilizzare pipeline di generatori per mantenere il codice modulare ed efficiente in termini di memoria, evitando la necessità di creare 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 pipeline diverse.
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