Việc hiểu danh sách đang có một số tương tác không mong muốn với phạm vi. Đây có phải là hành vi mong đợi không?Tên rebind danh sách đọc Python ngay cả sau phạm vi hiểu. Thê nay đung không?
Tôi đã có một phương pháp:
def leave_room(self, uid):
u = self.user_by_id(uid)
r = self.rooms[u.rid]
other_uids = [ouid for ouid in r.users_by_id.keys() if ouid != u.uid]
other_us = [self.user_by_id(uid) for uid in other_uids]
r.remove_user(uid) # OOPS! uid has been re-bound by the list comprehension above
# Interestingly, it's rebound to the last uid in the list, so the error only shows
# up when len > 1
Lúc nguy cơ rên rỉ, đây là một nguồn tàn bạo của lỗi. Khi tôi viết mã mới, tôi chỉ thỉnh thoảng tìm thấy những lỗi rất lạ do rebinding - ngay cả bây giờ tôi biết đó là một vấn đề. Tôi cần phải thực hiện một quy tắc như "luôn luôn bắt đầu các cuộc chiến temp tạm thời trong danh sách sự hiểu biết với dấu gạch dưới", nhưng thậm chí đó không phải là chứng minh ngu ngốc.
Thực tế là có loại thời gian chờ bom ngẫu nhiên này phủ nhận tất cả "dễ sử dụng" đẹp của tính năng hiểu danh sách.
-1: "nguồn tàn bạo của lỗi"? Khó khăn. Tại sao lại chọn một thuật ngữ tranh luận như vậy? Nói chung các lỗi đắt nhất là những hiểu lầm về yêu cầu và các lỗi logic đơn giản. Loại lỗi này là một vấn đề tiêu chuẩn trong rất nhiều ngôn ngữ lập trình. Tại sao gọi nó là 'tàn bạo'? –
Nó vi phạm nguyên tắc ít ngạc nhiên nhất. Nó cũng không được đề cập trong tài liệu python về việc hiểu danh sách, tuy nhiên nó đề cập đến nhiều lần chúng dễ dàng và tiện lợi như thế nào. Về cơ bản nó là một mảnh đất tồn tại bên ngoài mô hình ngôn ngữ của tôi, và do đó là không thể cho tôi thấy trước. –
+1 cho "nguồn lỗi nghiêm trọng". Từ 'tàn bạo' là * hoàn toàn * hợp lý. – Nathaniel