Trong một ứng dụng appengine, tôi muốn xây dựng một tập hợp tất cả các tên thuộc tính cho một danh sách các đối tượng. này nên khá đơn giản:Sử dụng biểu thức trình tạo lồng nhau trong Python 2.7
users = security.User.all().fetch(1000)
props = set([k for k in u.properties().keys() for u in users])
Tuy nhiên, các mã trên kết quả trong một lỗi:
File "/Users/paulkorzhyk/Projects/appengine-flask-template/app/app.py", line 70, in allusers
props = set([k for k in u.properties().keys() for u in users])
UnboundLocalError: local variable 'u' referenced before assignment
Sau khi một số thí nghiệm trong trình gỡ lỗi tôi đã nhận thấy rằng việc thêm một biểu hiện giả sửa mã:
users = security.User.all().fetch(1000)
[u.properties().keys() for u in users]
props = set([k for k in u.properties().keys() for u in users])
Điều này khá trực quan đối với tôi, tại sao phiên bản gốc thất bại trong Python 2.7? và tại sao thêm một biểu thức 'vô ích' ở giữa khắc phục vấn đề?
Theo câu trả lời này http://stackoverflow.com/questions/8049798/understanding-nested-list-comprehension liên kết phải được trái sang phải và do đó sắp xếp lại các câu lệnh vòng lặp nên sửa chữa. – Ifthikhan