¿Por qué el modo de líneas nuevas universal está en desuso en Python?

26

Me acabo de dar cuenta de que la función universal de nueva línea de las operaciones de archivos parece estar desapareciendo.

La documentación para Python 3.5 open's modeparámetro indica que está en desuso:

'U' modo de nueva línea universal (en desuso)

Al menos desde Python 3.2, opencontiene una advertencia similar de "solo compatibilidad con versiones anteriores" al documentar el uso del modeargumento:

'U' modo universal de líneas nuevas (para compatibilidad con versiones anteriores; no debe usarse en código nuevo)

Incluso en Python 2.7, se coloca una advertencia similar en la documentación de io.open.

¿Cuál es la razón de esto?

jpmc26
fuente
2
La lógica detrás de esto es bastante simple. Se considera más "Pythonic" haber nombrado cosas en lugar de cosas sin nombre. Entonces usa un parámetro con nombre en lugar de una bandera de caracteres. La idea de la bandera es en gran medida un remanente de la implementación de C de Python y no es de extrañar que se esté eliminando.
Ingeniero mundial el
Porque los archivos se abren en modo de nueva línea universal de forma predeterminada.
Boris

Respuestas:

37

La open()función en la biblioteca Python 3 tiene un newlineargumento. Configurarlo Nonepermite nuevas líneas universales. Esta es la forma aceptada de hacerlo, haciendo que el mode='U'argumento sea redundante.

Utilícelo newline=Nonepara habilitar el modo de líneas nuevas universal (este es el valor predeterminado).

Robert Harvey
fuente
55
Parece que lo entendí mal. Lo leí diciendo que las nuevas líneas universales en general estaban en desuso, no solo el carácter de modo. Gracias por aclarar eso.
jpmc26
6

Después de tropezar con esta pregunta, actualicé la documentación para ser más claro sobre lo que está sucediendo ( https://github.com/python/cpython/pull/11646/files ).

La entrada de la tabla confusamente críptica 'U'ha desaparecido, y en su lugar hay un párrafo más abajo que dice:

Hay un carácter de modo adicional permitido, 'U'que ya no tiene ningún efecto y se considera obsoleto. Anteriormente habilitó: term: universal newlinesen modo de texto, que se convirtió en el comportamiento predeterminado en Python 3.0. Consulte la documentación del newline <open-newline-parameter>parámetro : ref: para obtener más detalles.

ncoghlan
fuente