Tại sao chế độ dòng mới phổ quát không dùng nữa trong Python?


26

Tôi chỉ nhận thấy rằng tính năng dòng mới phổ quát của các hoạt động tập tin dường như đang trên đường ra.

Tài liệu về tham số opencủa Python 3.5 modechỉ ra rằng nó không dùng nữa:

'U' chế độ dòng mới phổ quát (không dùng nữa)

Ít nhất là lùi xa như Python 3.2, openchứa cảnh báo "chỉ tương thích ngược" tương tự khi ghi lại cách sử dụng modeđối số:

'U' chế độ dòng mới phổ quát (để tương thích ngược; không nên được sử dụng trong mã mới)

Ngay cả trong Python 2.7, một cảnh báo tương tự được đặt trong tài liệu của io.open.

Lý do cho điều này là gì?


2
Logic đằng sau điều này khá đơn giản. Nó được coi là "Pythonic" để đặt tên cho những thứ hơn là những thứ không tên. Vì vậy, bạn sử dụng một tham số được đặt tên chứ không phải là một cờ nhân vật. Ý tưởng cờ rất giống với việc triển khai C của Python và một thắc mắc nhỏ là nó đã bị loại bỏ.
Kỹ sư thế giới

Bởi vì các tệp được mở trong chế độ dòng mới phổ quát theo mặc định.
Boris

Câu trả lời:


37

Các open()chức năng trong thư viện Python 3 có một newlinecuộc tranh cãi. Thiết lập nó để Nonecho phép các dòng mới phổ quát. Đây là cách được chấp nhận để làm điều đó, khiến cho mode='U'đối số trở nên dư thừa.

Sử dụng newline=Noneđể bật chế độ dòng mới phổ quát (đây là mặc định).


5
Hình như tôi hiểu lầm. Tôi đọc nó như nói rằng các dòng mới phổ quát nói chung đã bị phản đối, không chỉ là nhân vật chế độ. Cám ơn giải thích rõ ràng.
jpmc26

6

Sau khi vấp phải câu hỏi này, tôi đã cập nhật tài liệu để rõ ràng hơn về những gì đang diễn ra ( https://github.com/python/cpython/pull/11646/files ).

Mục nhập bảng khó hiểu cho 'U'đã biến mất, và thay vào đó có một đoạn tiếp tục nêu rõ:

Có một ký tự chế độ bổ sung được phép, 'U'không còn tác dụng nữa và được coi là không dùng nữa. Nó đã kích hoạt trước đó: hạn: universal newlinestrong chế độ văn bản, trở thành hành vi mặc định trong Python 3.0. Tham khảo tài liệu của newline <open-newline-parameter>tham số : ref: để biết thêm chi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.