在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