Devo restituire iteratori o oggetti più sofisticati?

5

Dire che ho una funzione che crea un elenco di oggetti. Se voglio restituire un iteratore, dovrò return iter(a_list) . Dovrei farlo, o semplicemente restituire la lista così com'è? La mia motivazione per la restituzione di un iteratore è che ciò manterrebbe l'interfaccia più piccola - che tipo di contenitore che creo per raccogliere gli oggetti è essenzialmente un dettaglio di implementazione

D'altro canto, sarebbe inutile se l'utente della mia funzione dovesse dover ricreare lo stesso contenitore dall'iteratore, il che sarebbe negativo per le prestazioni.

    
posta Erik 27.05.2012 - 23:07
fonte

3 risposte

6

Restituisce la lista stessa. Questo è abbastanza efficiente (dal momento che una copia non è fatta). Se il chiamante desidera un iteratore, può sempre chiamare iter() .

Il fatto che la tua interfaccia restituisca un particolare tipo di oggetto non è davvero un grosso problema in Python; la digitazione anatra spesso rende gli oggetti esatti non importanti.

    
risposta data 28.05.2012 - 00:36
fonte
2

A meno che tu non abbia la necessità di attraversare l'elenco più volte, sarei molto probabilmente un generatore . Come preferenza personale, tendo a preferire i generatori agli elenchi poiché l'intera lista non viene mantenuta in memoria. Ovviamente, se non hai a che fare con un grande volume di dati, non importa in che direzione vai.

    
risposta data 28.05.2012 - 07:42
fonte
0

Sembra che restituire un iteratore abbia senso solo se la raccolta sottostante non deve essere modificata o interrogata in altro modo e non si desidera che la raccolta sottostante venga ripetuta più volte senza che il chiamante ottenga un nuovo iteratore. Potrei mancare alcuni punti più fini di Python, però, come sto pensando a questo in termini di iteratori di Java.

    
risposta data 04.06.2012 - 03:11
fonte

Leggi altre domande sui tag