As compreensões estão tendo algumas interações inesperadas com o escopo. Este é o comportamento esperado?
Eu tenho um 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
Correndo o risco de choramingar, esta é uma fonte brutal de erros. Enquanto escrevo um novo código, ocasionalmente encontro erros muito estranhos devido à religação - mesmo agora que sei que é um problema. Eu preciso criar uma regra como "sempre prefacie variáveis temporárias em compreensões de lista com sublinhado", mas mesmo isso não é à prova de idiotas.
O fato de haver essa bomba-relógio aleatória esperando nega toda a boa "facilidade de uso" da compreensão de listas.
for
construção -loop e for
-loops variáveis de vazamento . Portanto, não foi explícito, mas foi declarado implicitamente.