Зрозуміння мають деякі несподівані взаємодії з визначенням масштабів. Це очікувана поведінка?
У мене є метод:
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
Ризикуючи скуголити, це жорстоке джерело помилок. Коли я пишу новий код, я просто час від часу знаходжу дуже дивні помилки через перезавантаження - навіть зараз, коли я знаю, що це проблема. Мені потрібно скласти таке правило, як "завжди передмова тимчасових змін у списках з підкресленням", але навіть це не є дурним доказом.
Те, що існує цей випадковий час очікування бомби, заперечує всю приємну "простоту використання" списків.
for
-loop конструкції і for
-loops витоку змінних . Тож це було не явно, але було неявно зазначено.