Pemahaman mengalami beberapa interaksi tak terduga dengan pelingkupan. Apakah ini perilaku yang diharapkan?
Saya punya metode:
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
Dengan risiko merengek, ini adalah sumber kesalahan yang brutal. Saat saya menulis kode baru, saya hanya sesekali menemukan kesalahan yang sangat aneh karena pengikatan ulang - bahkan sekarang saya tahu itu masalah. Saya perlu membuat aturan seperti "selalu awali temp vars dalam pemahaman daftar dengan garis bawah", tetapi itu pun bukan bukti yang bodoh.
Fakta bahwa ada semacam menunggu bom waktu acak ini meniadakan semua "kemudahan penggunaan" dari pemahaman daftar.
for
membangun -loop dan for
-loops variabel kebocoran . Jadi itu tidak eksplisit tetapi dinyatakan secara implisit.