Kavrayışlar, kapsam belirleme ile bazı beklenmedik etkileşimler yaşıyor. Bu beklenen davranış mı?
Bir yöntemim var:
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
Sızlanma riski altında, bu acımasız bir hata kaynağıdır. Yeni kod yazarken, yeniden bağlama nedeniyle ara sıra çok tuhaf hatalar buluyorum - şimdi bile bunun bir sorun olduğunu biliyorum. "Her zaman alt çizgi ile liste anlayışlarında geçici değişkenlere önsöz" gibi bir kural yapmam gerekiyor, ama bu bile aptalca bir kanıt değil.
Bu rastgele saatli bomba bekleme türünün olması, liste anlayışlarının tüm hoş "kullanım kolaylığını" geçersiz kılar.
for
döngü yapısına eşdeğer olduğunu ve for
-döngü sızıntı değişkenlerini belirtir . Yani açık değildi, üstü kapalı olarak belirtildi.