Pourquoi le mode de saut de ligne universel est-il déconseillé en Python?

26

Je viens de remarquer que la fonctionnalité de nouvelle ligne universelle des opérations sur les fichiers semble être en voie de disparition.

La documentation de Python 3.5 opendu modeparamètre indique qu'il est dépréciée:

'U' mode de saut de ligne universel (obsolète)

Au moins aussi loin que Python 3.2, opencontient un avertissement similaire de "compatibilité descendante uniquement" lors de la documentation de l'utilisation de l' modeargument:

'U' mode de saut de ligne universel (pour la compatibilité descendante; ne doit pas être utilisé dans le nouveau code)

Même en Python 2.7, un avertissement similaire est placé dans la documentation de io.open.

Quelle en est la raison?

jpmc26
la source
2
La logique derrière cela est assez simple. Il est considéré comme plus "Pythonic" d'avoir nommé des choses plutôt que des choses sans nom. Vous utilisez donc un paramètre nommé plutôt qu'un indicateur de caractère. L'idée du drapeau est vraiment un reste de l'implémentation C de Python et il n'est pas étonnant qu'elle soit éliminée.
World Engineer
Parce que les fichiers sont ouverts en mode saut de ligne universel par défaut.
Boris

Réponses:

37

La open()fonction de la bibliothèque Python 3 a un newlineargument. Le paramétrer sur Nonepermet des sauts de ligne universels. C'est la façon acceptée de le faire, ce qui rend l' mode='U'argument redondant.

Utilisez newline=Nonepour activer le mode de saut de ligne universel (c'est la valeur par défaut).

Robert Harvey
la source
5
On dirait que j'ai mal compris. Je l'ai lu comme disant que les sauts de ligne universels en général étaient dépréciés, pas seulement le caractère de mode. Merci d'avoir clarifié cela.
jpmc26
6

Après être tombé sur cette question, j'ai mis à jour la documentation pour être plus clair sur ce qui se passe ( https://github.com/python/cpython/pull/11646/files ).

L'entrée de table cryptiquement confuse pour a 'U'disparu, et à la place, il y a un paragraphe plus bas qui dit:

Il y a un caractère de mode supplémentaire autorisé, 'U'qui n'a plus aucun effet, et est considéré comme obsolète. Il permettait auparavant: term: universal newlinesen mode texte, qui est devenu le comportement par défaut dans Python 3.0. Reportez-vous à la documentation du newline <open-newline-parameter>paramètre : ref: pour plus de détails.

ncoghlan
la source