Si una función toma como entrada el nombre de un archivo de texto, puedo refactorizarlo para tomar un objeto de archivo (lo llamo "secuencia"; ¿hay una palabra mejor?) Las ventajas son obvias - una función que toma una corriente como un argumento es:nombre de archivo vs objeto de archivo como argumento de función
- mucho más fácil escribir una prueba unitaria para, ya no necesito para crear un archivo temporal sólo para la prueba
- más flexible, ya que puedo usarlo en situaciones donde de alguna manera ya tengo el contenido del archivo en una variable
¿Hay alguna desventaja en las transmisiones? ¿O debería siempre refactorizar una función desde un argumento de nombre de archivo a un argumento de transmisión (suponiendo, por supuesto, que el archivo sea solo de texto)?
Sí, cuando dije "secuencia", quise decir "objeto de archivo abierto". ¿No sería posible escribir un decorador que guarde y restaure el estado de la secuencia? – max
¿Y no hay una manera de crear una copia barata de una secuencia, de modo que la copia posea su propio "puntero", mientras que el "puntero" de la secuencia original queda intacto? Eso sería incluso más limpio que el método de guardar/restaurar estado. – max
@max - Claro, podrías escribir un decorador para hacer eso. Lo importante es documentar cuándo está restaurando el estado y cuándo no. En cuanto a la creación de una copia, lo único que se me ocurre es 'itertools.tee', que es un poco diferente (pero es mucho más allá de mi hora de acostarse normal, así que no garantizo nada de lo que escribo ahora mismo: ^). – mgilson