简化,我想做这样的事情:
({'publication': obj.pub_name, 'views': obj.views, } for obj = analyze_publication(p) for p in Publication.objects.all())
当然,这不起作用。
现在,我正在使用:
({'publication': obj.pub_name, 'views': obj.views, } for obj in (analyze_publication(p) for p in Publication.objects.all()))
我不知道第二个代码片段是如何完成的,还是有另一种语法,或者效率不高等等。我只用了2周的时间。
答案 0 :(得分:2)
只是另一个版本:
( dict(publication= obj.pub_name, views= obj.views)
for obj in map(analyze_publication, Publication.objects.all()) )
答案 1 :(得分:1)
你有不平衡的parens ,但除此之外,你应该没有(功能)问题嵌套生成器表达式。与列表推导一样,它们在嵌套时很快变得难以处理。为了便于阅读,我建议将它移到命名的生成器上。
如果您对性能感到好奇,请使用disassembler或profilers比较不同的方法。
答案 2 :(得分:0)
我不是试图扭曲生成器表达式语法以允许名称绑定,而是使用一个函数来生成绑定。然后很简单:
def pubdict(pub):
obj = analyze_publication(pub)
return {"publication": obj.pub_name, "views": obj.views}
itertools.imap(pubdict, Publication.objects.all()