3

简化,我想做这样的事情:

({'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 周的 Python 时间。

4

3 回答 3

2

只是另一个版本:

( dict(publication= obj.pub_name, views= obj.views) 
    for obj in map(analyze_publication, Publication.objects.all()) )
于 2011-12-13T06:53:45.530 回答
1

有不平衡的括号,但除此之外,嵌套生成器表达式应该没有(功能)问题。与列表推导式一样,它们在嵌套时很快就会变得笨拙。为了便于阅读,我建议将其移至命名生成器。

如果您对性能感到好奇,请使用disassemblerprofilers比较不同的方法。

于 2011-12-13T06:07:34.463 回答
0

与其试图扭曲生成器表达式语法以允许名称绑定,不如使用一个函数来生成绑定。然后很简单:

def pubdict(pub):
    obj = analyze_publication(pub)
    return {"publication": obj.pub_name, "views": obj.views}

itertools.imap(pubdict, Publication.objects.all()
于 2011-12-13T15:37:37.483 回答