Warum ist der universelle Zeilenwechsel-Modus in Python veraltet?

26

Mir ist gerade aufgefallen, dass das universelle Newline- Feature von Dateioperationen auf dem Weg nach draußen zu sein scheint.

Die Dokumentation für Python 3.5 open‚s modeParameter zeigt an, dass es veraltet:

'U' Universal Newlines Mode (veraltet)

Zumindest bis zu Python 3.2 openenthält es eine ähnliche Warnung "Nur Abwärtskompatibilität", wenn die Verwendung des modeArguments dokumentiert wird :

'U' Universal Newlines Mode (aus Gründen der Abwärtskompatibilität; sollte nicht in neuem Code verwendet werden)

Sogar in Python 2.7 ist eine ähnliche Warnung in der Dokumentation von enthalten io.open.

Was ist der Grund dafür?

jpmc26
quelle
2
Die Logik dahinter ist ziemlich einfach. Es wird eher als "pythonisch" angesehen, Dinge benannt zu haben, als unbenannte Dinge. Sie verwenden also einen benannten Parameter anstelle eines Zeichenflags. Die Flag-Idee ist ein Überbleibsel von Pythons C-Implementierung und es ist kein Wunder, dass sie verworfen wird.
Welt Ingenieur
Da Dateien standardmäßig im universellen Newline-Modus geöffnet werden.
Boris

Antworten:

37

Die open()Funktion in der Python 3-Bibliothek hat ein newlineArgument. Durch Einstellen auf Nonewerden universelle Zeilenumbrüche aktiviert. Dies ist die akzeptierte Methode, um das mode='U'Argument überflüssig zu machen.

Verwenden newline=NoneSie diese Option, um den Universal Newlines-Modus zu aktivieren (dies ist die Standardeinstellung).

Robert Harvey
quelle
5
Sieht so aus, als hätte ich es falsch verstanden. Ich habe es so gelesen, dass universelle Zeilenumbrüche im Allgemeinen veraltet sind, nicht nur das Moduszeichen. Danke, dass Sie das geklärt haben.
jpmc26
6

Nachdem ich über diese Frage gestolpert war, habe ich die Dokumentation aktualisiert, um klarer zu sein, was los ist ( https://github.com/python/cpython/pull/11646/files ).

Der verwirrend kryptische Tabelleneintrag für 'U'ist weg und stattdessen gibt es einen Absatz weiter unten, der besagt:

Es ist ein zusätzliches Moduszeichen zulässig, 'U'das keine Auswirkung mehr hat und als veraltet gilt. Bisher war Folgendes aktiviert: term: universal newlinesim Textmodus, was in Python 3.0 zum Standardverhalten wurde. newline <open-newline-parameter>Weitere Informationen finden Sie in der Dokumentation des Parameters : ref:.

ncoghlan
quelle