Чому в Python застарілий режим універсальних рядків?


26

Я щойно помітив, що універсальна функція файлових операцій з нового рядка, здається, виходить з ладу.

Документація для Python 3.5 open«s modeпараметр вказує на те, що це НЕ рекомендується:

'U' універсальний режим нових рядків (застарілий)

Принаймні, що стосується Python 3.2, openмістить аналогічне попередження "лише назад сумісність" під час документування використання modeаргументу:

'U' універсальний режим нових рядків (для зворотної сумісності; не слід використовувати в новому коді)

Навіть у Python 2.7 подібне попередження міститься в документації на io.open.

У чому причина цього?


2
Логіка цього досить проста. Вважається більш "пітонічним" називати речі, а не неназваними. Отже, ви використовуєте названий параметр, а не прапор символів. Ідея прапора є дуже великою частиною впровадження програми Python на C, і не дивно, що його відсівають.
Світовий інженер

Оскільки файли відкриваються в універсальному режимі нового рядка за замовчуванням.
Борис

Відповіді:


37

open()Функція в бібліотеці Python 3 має newlineаргумент. Налаштувавши його таким чином, щоб він Noneвключав універсальні нові рядки. Це прийнятий спосіб зробити це, зробивши mode='U'аргумент зайвим.

Використовуйте newline=Noneдля включення універсального режиму нових рядків (це за замовчуванням).


5
Схоже, я неправильно зрозумів. Я читав це, як кажучи про те, що універсальні нові рядки взагалі застаріли, а не лише модний характер. Дякуємо, що очистили це.
jpmc26

6

Натрапивши на це питання, я оновив документацію, щоб зрозуміти, що відбувається ( https://github.com/python/cpython/pull/11646/files ).

Заплутано криптовалютний запис для таблиці 'U'відсутній, а замість цього далі є абзац, який говорить:

Дозволений додатковий символ режиму 'U', який більше не має ефекту, і вважається застарілим. Раніше він включав: term: universal newlinesу текстовому режимі, який став типовою поведінкою в Python 3.0. newline <open-newline-parameter>Детальнішу інформацію див. У документації параметра: ref:.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.