Python Django queryset和生成器
出乎意料的是,我想知道下面使用generator遍历结果集的方法是否会对正常的迭代产生任何积极或消极的影响 例如 反对:Python Django queryset和生成器,python,django,iteration,generator,Python,Django,Iteration,Generator,出乎意料的是,我想知道下面使用generator遍历结果集的方法是否会对正常的迭代产生任何积极或消极的影响 例如 反对: for item in Item.objects.all(): do_stuff_with_item(item) 前者速度较慢,因为它将创建一个包含所有模型的列表,然后一次生成一个模型,而后者将直接使用该列表。如果您想要一个生成器,那么您应该使用它。否。除了它更详细、冗余,并且不是特别有用(在您提供的生成器的上下文中) 当您在for的中执行项.objects.all()
for item in Item.objects.all():
do_stuff_with_item(item)
前者速度较慢,因为它将创建一个包含所有模型的列表,然后一次生成一个模型,而后者将直接使用该列表。如果您想要一个生成器,那么您应该使用它。否。除了它更详细、冗余,并且不是特别有用(在您提供的生成器的上下文中)
当您在
for
的中执行项.objects.all()
时,将使用with query caching()对它们进行迭代。如果不希望缓存结果,请使用Ignacio建议的iterator()
。为什么要使用生成器?它没有添加任何内容。嗨,这就是为什么我想知道生成器是否会带来任何性能/资源更改?您确定调用iterator
会产生结果,而不仅仅是避免缓存吗?文档中没有明确说明。@NirIzr:这两件事有什么区别?例如,它可以创建一个结果列表并返回该列表。我现在确实发现了这样一点:明确地说你是对的。但是它们会被缓存在列表中。我理解缓存
是将结果保存以供以后查询。这不是一个要求,因为调用。all()
可能(不缓存)触发另一个DB查询。没有必要过度讨论这个问题,你的答案对我很有用,我已经投了赞成票。只是不清楚,伊姆霍。
for item in Item.objects.all():
do_stuff_with_item(item)