Dlaczego uniwersalny tryb nowej linii jest przestarzały w Pythonie?

26

Właśnie zauważyłem, że uniwersalna nowa funkcja operacji na plikach wydaje się być w drodze.

Dokumentacja dla Pythona 3.5 openjest modeparametr wskazuje, że to przestarzałe:

'U' tryb uniwersalny nowego wiersza (przestarzały)

Przynajmniej w przeszłości jak w Python 3.2 openzawiera podobne ostrzeżenie „tylko wsteczna kompatybilność” podczas dokumentowania użycia modeargumentu:

'U' uniwersalny tryb nowej linii (dla kompatybilności wstecznej; nie powinien być używany w nowym kodzie)

Nawet w Pythonie 2.7 podobne ostrzeżenie znajduje się w dokumentacji io.open.

Jaki jest tego powód?

jpmc26
źródło
2
Logika tego jest dość prosta. Uważa się, że bardziej „pytoniczne” jest nadawanie nazw rzeczom niż imiona bezimienne. Więc używasz nazwanego parametru zamiast flagi znaku. Pomysł flagowy jest w dużej mierze pozostałością po implementacji języka Python i nic dziwnego, że został on usunięty.
Inżynier świata
Ponieważ pliki są domyślnie otwierane w uniwersalnym trybie nowej linii.
Boris

Odpowiedzi:

37

open()Funkcja w bibliotece Python 3 ma newlineargumentu. Ustawienie na Nonewłącza uniwersalne znaki nowej linii. Jest to przyjęty sposób, aby uczynić mode='U'argument zbędnym.

Użyj, newline=Noneaby włączyć uniwersalny tryb nowej linii (jest to ustawienie domyślne).

Robert Harvey
źródło
5
Wygląda na to, że źle zrozumiałem. Przeczytałem to jako powiedzenie, że uniwersalne nowe wiersze były przestarzałe, a nie tylko tryb. Dzięki za wyjaśnienie.
jpmc26
6

Po tym, jak natknąłem się na to pytanie, zaktualizowałem dokumentację, aby wyjaśnić, co się dzieje ( https://github.com/python/cpython/pull/11646/files ).

Myląco tajemniczy wpis w tabeli 'U'zniknął, a zamiast tego znajduje się akapit, który mówi:

Dozwolony jest dodatkowy tryb postaci 'U', który nie ma już żadnego efektu i jest uważany za przestarzały. Wcześniej włączono: termin: universal newlinesw trybie tekstowym, który stał się domyślnym zachowaniem w Pythonie 3.0. Zapoznaj się z dokumentacją: Nr ref: newline <open-newline-parameter>parametr dla dalszych szczegółów.

ncoghlan
źródło