Mengapa mode baris baru universal tidak lagi digunakan dalam Python?

26

Saya hanya memperhatikan bahwa fitur universal baris baru dari operasi file tampaknya sedang keluar.

Dokumentasi untuk Python 3.5 open's modeparameter menunjukkan bahwa itu tidak berlaku lagi:

'U' mode baris baru universal (usang)

Setidaknya sejauh Python 3.2, openberisi peringatan "kompatibilitas hanya mundur" yang serupa ketika mendokumentasikan penggunaan modeargumen:

'U' mode baris baru universal (untuk kompatibilitas mundur; tidak boleh digunakan dalam kode baru)

Bahkan di Python 2.7, peringatan serupa ditempatkan di dokumentasi io.open.

Apa alasannya?

jpmc26
sumber
2
Logika di balik ini cukup sederhana. Itu dianggap lebih "Pythonic" untuk menamai sesuatu daripada hal-hal yang tidak disebutkan namanya. Jadi, Anda menggunakan parameter bernama daripada bendera karakter. Ide bendera sangat sisa dari implementasi Python C dan tidak mengherankan bahwa itu disingkirkan.
Insinyur Dunia
Karena file dibuka dalam mode universal baris baru secara default.
Boris

Jawaban:

37

The open()fungsi dalam Python 3 perpustakaan memiliki newlineargumen. Mengaturnya untuk Nonememungkinkan baris baru universal. Ini adalah cara yang diterima untuk melakukannya, menjadikan mode='U'argumen itu berlebihan.

Gunakan newline=Noneuntuk mengaktifkan mode baris baru universal (ini adalah default).

Robert Harvey
sumber
5
Sepertinya saya salah paham. Saya membacanya dengan mengatakan bahwa baris umum universal pada umumnya sudah usang, bukan hanya karakter mode. Terima kasih sudah membereskannya.
jpmc26
6

Setelah menemukan pertanyaan ini, saya memperbarui dokumentasi agar lebih jelas tentang apa yang terjadi ( https://github.com/python/cpython/pull/11646/files ).

Entri tabel membingungkan membingungkan untuk 'U'hilang, dan sebaliknya ada paragraf lebih lanjut yang menyatakan:

Ada karakter mode tambahan yang diizinkan 'U',, yang tidak lagi memiliki efek apa pun, dan dianggap sudah usang. Ini sebelumnya diaktifkan: istilah: universal newlinesdalam mode teks, yang menjadi perilaku default di Python 3.0. Lihat dokumentasi newline <open-newline-parameter>parameter : ref: untuk perincian lebih lanjut.

ncoghlan
sumber