Tính năng tổng hợp đang có một số tương tác không mong muốn với việc xác định phạm vi. Đây có phải là hành vi dự kiến?
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
Với nguy cơ than vãn, đây là một nguồn sai sót tàn bạo. Khi tôi viết mã mới, tôi chỉ thỉnh thoảng phát hiện thấy những lỗi rất kỳ lạ do việc đóng lại - ngay cả khi 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 mở đầu các vars tạm thời trong phần hiểu danh sách với dấu gạch dưới", nhưng ngay cả điều đó cũng không dễ bị đánh lừa.
Thực tế là có kiểu chờ bom hẹn giờ ngẫu nhiên này đã phủ nhận tất cả sự "dễ sử dụng" của việc hiểu danh sách.
for
cấu trúc -loop và for
-loops biến rò rỉ . Vì vậy, nó không rõ ràng nhưng đã được tuyên bố ngầm.