Las comprensiones están teniendo algunas interacciones inesperadas con el alcance. ¿Es este el comportamiento esperado?
Tengo un método:
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
A riesgo de lloriquear, esta es una brutal fuente de errores. Mientras escribo un código nuevo, de vez en cuando encuentro errores muy extraños debido al reenlace, incluso ahora que sé que es un problema. Necesito hacer una regla como "siempre prefacio vars temporales en listas por comprensión con guión bajo", pero incluso eso no es infalible.
El hecho de que haya esta bomba de tiempo aleatoria en espera niega toda la agradable "facilidad de uso" de las listas por comprensión.
for
constructo -loop y for
-loops variables de fugas . Así que no fue explícito, sino implícitamente declarado.