Se una funzione prende come input il nome di un file di testo, posso rifattorizzarlo per prendere invece un oggetto file (lo chiamo "stream"; c'è una parola migliore?). I vantaggi sono evidenti - una funzione che prende un flusso come argomento è:nome file vs oggetto file come argomento di funzione
- molto più facile scrivere un test di unità per, dal momento che non ho bisogno di creare un file temporaneo solo per il test
- più flessibile, dal momento che posso utilizzarlo in situazioni in cui in qualche modo ho già il contenuto del file in una variabile
Ci sono degli svantaggi nei flussi? O dovrei sempre refactificare una funzione da un argomento nome file ad un argomento stream (assumendo, ovviamente, il file è solo testo)?
Sì, quando ho detto "stream", intendevo "open file object". Non sarebbe possibile scrivere un decoratore che salva e ripristina lo stato del flusso? – max
E non c'è un modo per creare una copia economica di uno stream, in modo tale che la copia possieda il proprio "puntatore", mentre il "puntatore" del flusso originale rimane intatto? Sarebbe ancora più pulito rispetto all'approccio di salvataggio/ripristino dello stato. – max
@max - Certo, potresti scrivere un decoratore per farlo. L'importante è documentare quando stai ripristinando lo stato e quando non lo sei. Per quanto riguarda la creazione di una copia, l'unica cosa che mi viene in mente è 'itertools.tee', che è un po 'diversa (ma è molto oltre la normale ora di andare a letto, quindi non garantisco nulla che scrivo in questo momento: ^). – mgilson