Les compréhensions ont des interactions inattendues avec la portée. Est-ce le comportement attendu?
J'ai une méthode:
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
Au risque de pleurnicher, c'est une source brutale d'erreurs. Au fur et à mesure que j'écris un nouveau code, je trouve occasionnellement des erreurs très étranges dues à la reliure - même maintenant que je sais que c'est un problème. J'ai besoin de faire une règle comme "toujours préface les variables temporaires dans les compréhensions de liste avec un trait de soulignement", mais même ce n'est pas infaillible.
Le fait qu'il y ait cette sorte d'attente aléatoire de bombe à retardement annule toute la "facilité d'utilisation" de la compréhension de liste.
for
construction -loop et for
-loops des variables fuite . Ce n'était donc pas explicite, mais c'était implicitement déclaré.