Tôi không hỏi về các quy tắc phạm vi của Python; Tôi hiểu nói chung làm thế nào phạm vi hoạt động trong Python cho các vòng lặp. Câu hỏi của tôi là tại sao các quyết định thiết kế đã được thực hiện theo cách này. Ví dụ: (không có ý định chơi chữ):
for foo in xrange(10):
bar = 2
print(foo, bar)
Ở trên sẽ in (9,2).
Điều này gây ấn tượng với tôi là kỳ lạ: 'foo' thực sự chỉ là kiểm soát vòng lặp và 'thanh' được xác định bên trong vòng lặp. Tôi có thể hiểu tại sao có thể cần thiết cho 'thanh' bên ngoài vòng lặp (nếu không, đối với các vòng lặp sẽ có chức năng rất hạn chế). Điều tôi không hiểu là tại sao cần phải điều khiển biến trong phạm vi sau khi thoát khỏi vòng lặp. Theo kinh nghiệm của tôi, nó chỉ đơn giản là làm tắc nghẽn không gian tên toàn cầu và khiến cho việc theo dõi các lỗi sẽ bị các phiên dịch viên trong các ngôn ngữ khác bắt gặp khó khăn hơn.
for
vòng lặp làm lộn xộn không gian tên toàn cầu của mình, hãy bọc nó trong một hàm. Đóng cửa thiên hạ!