在appengine應用程序中,我想爲對象列表構建一組所有屬性名稱。 這應該是相當簡單:在Python 2.7中使用嵌套的生成器表達式
users = security.User.all().fetch(1000)
props = set([k for k in u.properties().keys() for u in users])
然而,上述導致錯誤代碼:
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
在調試一些實驗,我發現,添加僞表達修復了代碼後:
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])
這對我來說非常不直觀,爲什麼原始版本在Python 2.7中失敗?以及爲什麼在中間添加「無用」表達可以解決問題?
根據這個答案http://stackoverflow.com/questions/8049798/understanding-nested-list-comprehension該協會應該左到右,因此重新排序循環語句應該糾正。 – Ifthikhan