Dựa trên những gì tôi có thể tìm thấy trên các tài liệu lưu trữ python-dev, đây chỉ là một trường hợp của các nhà phát triển không tuân theo hướng dẫn riêng của họ.
Guido thực sự gợi ý renaming defaultdict
to DefaultDict
để sửa chữa sự mâu thuẫn này trong cuộc thảo luận của PEP mà giới thiệu OrderedDict
:
Dù sao, có vẻ như các mô-đun bộ sưu tập đặc biệt đã là nội bộ mâu thuẫn - NamedTuple
vs defaultdict
. Theo một nghĩa nào đó, defaultdict là phiên bản lẻ ở đây vì đây là những thứ bạn nhập từ một số mô-đun, chúng không được tích hợp sẵn. Có thể đổi tên thành NamedDict
?
Lưu ý rằng NamedDict
là một typo, he meant DefaultDict
:
> Tôi giả sử bạn có nghĩa là "DefaultDict".
Vâng, tôi đã bị phân tâm. :-(
Tôi không chắc chắn lý do tại sao sự thay đổi này (và những thay đổi tương tự cho các module khác, ví dụ như socket.socket
, datetime.datetime
) không bao giờ được thực hiện, kể từ khi Guido hỗ trợ làm việc đó.
Trớ trêu thay, (hoặc có thể Alex Martelli), người đã đưa ra với tên defaultdict
, mặc dù thực tế rằng họ đã dựa trên một lớp học nội Google đã sử dụng gọi DefaultDict
:
Google có một kiểu dữ liệu nội bộ gọi là DefaultDict
mà được 012.351.đã vượt qua giá trị mặc định khi xây dựng. Phương pháp __getitem__
của nó, thay vì tăng KeyError
, chèn một bản sao nông (!) Của giá trị mặc định cho vào dict khi không tìm thấy giá trị.
... snip ...
Over ăn trưa với Alex Martelli, ông đề nghị rằng một lớp con của dict với hành vi này (nhưng thực hiện trong C) sẽ là một bổ sung tốt cho ngôn ngữ. Có vẻ như sẽ không khó để thực hiện.Có thể là nội trang dựng sẵn có tên defaultdict
. Đối số đầu tiên, bắt buộc, đối với hàm tạo phải là giá trị mặc định. Các đối số còn lại (ngay cả từ khóa args) được chuyển không đổi cho hàm tạo dict.
thảo luận một cách nhanh chóng chuyển từ defaultdict
là một built-in để nó là một phần của mô-đun collections
, nhưng tên toàn chữ thường bị mắc kẹt. Cuộc thảo luận này đã diễn ra vào năm 2006, do đó, PEP 8 đã tồn tại trong nhiều năm sau đó. Không chắc chắn lý do tại sao nó không bao giờ xảy ra với bất cứ ai mà nó nên được đặt tên DefaultDict
vào thời điểm đó.
"Giờ đây các lớp và loại được cho là thống nhất, sự khác biệt giữa CamelCase đối với các lớp Python và chữ thường cho các kiểu C là bực bội khó xử." - user2357112, từ nhận xét trong bản sao được đánh dấu. – user2864740
Giải quyết điểm "này đang thay đổi": đó không phải là cách triển khai python 3 c. Ví dụ py3, bạn làm 'import pickle' và đại biểu này để' import _pickle' - triển khai c - nếu có. – roippi
Cảm ơn, @roippi, tôi đã đề cập đến các bản vá lỗi trong được gọi là 'cOrderedDict'. Thực tế là cả hai phiên bản C và Python sẽ được nhập thông qua cùng tên là không liên quan. Các quy ước đặt tên cho 'defaultdict' và' OrderedDict' vẫn không khớp. –