Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django queryset和生成器_Python_Django_Iteration_Generator - Fatal编程技术网

Python Django queryset和生成器

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()

出乎意料的是,我想知道下面使用generator遍历结果集的方法是否会对正常的迭代产生任何积极或消极的影响

例如

反对:

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)