我试图调整在速度部受苦的应用程序。因此,我已经开始将所有的for-loop语句转换为列表解析。在使用Django查询集时使用列表理解而不是循环
目前,我正在研究一个需要遍历Django查询集字典的函数。旧代码使用for-loop语句来遍历这个,它工作正常。我使用list comprehension的代码返回的是django querysets,而不是我的模型对象。
下面是代码:
def get_children(parent):
# The following works
children = []
for value in get_data_map(parent).itervalues():
children += list(value)
# This part doesn't work as intended.
booms = [value for value in get_data_map(parent).itervalues() if value]
import pdb
pdb.set_trace()
(Pdb) type(children[0])
<class 'site.myapp.models.Children'>
(Pdb) type(booms[0])
<class 'django.db.models.query.QuerySet'>
注意get_data_map返回一个字典,字典的值是<class 'django.db.models.query.QuerySet'>
的这部分代码的消费应用程序的一部分时间最多的一个。如果我在列表解析中得到这个工作,应用程序的速度将有望提高两倍。
任何想法如何加快这部分代码?
是什么让你认为列表推导比在'...循环中进行常规'for ...更快? – dcrosta
我已经做了一个关于生成器,列表解析,循环和映射的简单测试,并且列表解析比..循环快两倍。 – mohi666