van tutorial rossum payton lenguaje language guido descargar python syntax history language-design

tutorial - ¿Por qué el lenguaje Python no tiene un método writeln()?



python tutorial (5)

En Python 2, usa:

print >>file_output, ''Fooo line ''

En Python 3, usa:

print(''Fooo line '', file=file_output)

Si necesitamos escribir una nueva línea en un archivo, tenemos que codificar:

file_output.write(''Fooo line /n'')

¿Hay alguna razón por la que Python no tenga un método writeln() ?


Probablemente no haya una razón real, solo que es realmente fácil escribir una nueva línea cuando la necesita, así que ¿por qué desordenar la interfaz del archivo con un método adicional solo para hacer eso?


Se omitió proporcionar una interfaz simétrica de los métodos de file y porque una writeln() tendría sentido:

  • read() coincide con write() : ambos operan en datos sin procesar
  • readlines() coincide con writelines() : ambos operan en líneas, incluidos sus EOL
  • readline() rara vez se utiliza; un iterador hace el mismo trabajo (a excepción del parámetro de size opcional)

Una línea de writeline() (o writeln() ) sería esencialmente lo mismo que write() , ya que no agregaría una EOL (para que coincida con el comportamiento de writelines() ).

La mejor manera de imitar una print en un archivo es usar la sintaxis especial de impresión a archivo de Python 2.xo el argumento de la palabra clave del file de la función print() , como sugirió Daniel.

Personalmente, prefiero el print >>file, ... sintaxis sobre file.write(''.../n'') .


Siento que debería. Lo más cercano que puedes usar es:

file_output.writelines([foo_msg, ''/n''])


print() es la función que está buscando. Como gran parte del polimorfismo del núcleo en python, la impresión se proporciona mediante una función incorporada en lugar de utilizar métodos (como len() , next() , repr() etc.).

La función print() , que es la interfaz universal, también la hace más versátil, sin que los objetos del archivo tengan que implementarla. En este caso, la terminación predeterminada se realiza por nueva línea, pero se puede elegir en la llamada de función, por ejemplo:

print("text", file=sys.stderr, end="/n")

En su caso de uso sugerido, todos los objetos de archivo tendrían que implementar no solo un método .write() (ahora usado por print() ), sino también .writeln() , ¡y quizás incluso más! Este polimorfismo basado en funciones hace que Python sea muy rico, sin cargar las interfaces (recuerde cómo funciona la tipificación de pato).

Nota: Este modelo siempre ha estado en el centro de Python. Es solo más puro en mis ejemplos, que pertenecen a Python 3