ความเข้าใจกำลังมีปฏิสัมพันธ์ที่ไม่คาดคิดกับการกำหนดขอบเขต นี่คือพฤติกรรมที่คาดหวังหรือไม่?
ฉันมีวิธีการ:
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
ที่เสี่ยงต่อการส่งเสียงหอนนี่เป็นแหล่งที่มาของข้อผิดพลาด ในขณะที่ฉันเขียนโค้ดใหม่บางครั้งฉันก็พบข้อผิดพลาดแปลก ๆ เนื่องจากการกรอกลับ - แม้ว่าตอนนี้ฉันจะรู้แล้วว่ามันมีปัญหา ฉันจำเป็นต้องสร้างกฎเช่น "always preface temp vars in list comp understandions with underscore" แต่ถึงอย่างนั้นก็ไม่สามารถพิสูจน์ได้
ความจริงที่ว่ามีการรอระเบิดเวลาแบบสุ่มนี้จะลบล้าง "ความสะดวกในการใช้งาน" ที่ดีทั้งหมดของความเข้าใจในรายการ
for
สร้าง -loop และfor
-loops ตัวแปรการรั่วไหล ดังนั้นจึงไม่ชัดเจน แต่เป็นการระบุโดยปริยาย