与 Python/Django 中的性能/效率相关的问题
Posted
技术标签:
【中文标题】与 Python/Django 中的性能/效率相关的问题【英文标题】:Questions related to performance/efficiency in Python/Django 【发布时间】:2014-08-26 02:35:06 【问题描述】:几天前我有几个问题一直困扰着我。我是初学者 Python/Django 程序员,所以我只想在深入了解实时产品开发之前弄清楚一些事情。(对于 Python 2.7。*)
1) 在函数中使用之前将值保存在变量中
for x in some_list/tuple:
func(do_something(x))
for x in some_list/tuple:
y = do_something(x)
func(y)
哪个更快或者我应该使用哪个。
2)在 Django 中创建模型的新对象
def myview(request):
u = User(username="xyz12",city="TA",name="xyz",...)
u.save()
def myview(request):
d = 'username':"xyz12",'city':"TA",'name':"xyz",...
u = User(**d)
u.save()
3) 创建字典
var = Dict(key1=val1,key2=val2,...)
var = 'key1':val1,'key2':val2,...
4) 我知道.append()
比+=
快,但是如果我想将列表的元素附加到另一个列表中怎么办
a = [1,2,3,],b=[4,5,6]
a += b
或
for i in b:
a.append(i)
【问题讨论】:
这些都是相当微不足道的问题,担心任何性能方面的考虑很可能是错误的。除了第三个例子,我个人更喜欢第一个选项。 【参考方案1】:这是一个非常有趣的问题,但我认为你没有充分的理由问这个问题。通过此类优化获得的性能可以忽略不计,尤其是在您使用少量元素时。
另一方面,真正重要的是代码的易读性和清晰性。
def myview(request):
d = 'username':"xyz12",'city':"TA",'name':"xyz",...
u = User(**d)
u.save()
例如,此代码乍一看并不“容易”阅读和理解。它需要在找到实际作用之前考虑它。除非你需要中间步骤,否则不要这样做。
对于4th
点,我会选择第一个解决方案,更清晰(它避免了在循环中调用相同函数所产生的函数调用开销)。您还可以使用更专业的函数来获得更好的性能,例如 reduce
(请参阅此答案:https://***.com/a/11739570/3768672 和此线程:What is the fastest way to merge two lists in python?)。
1st
和 3rd
点通常取决于您的喜好,因为两者非常相似,并且无论如何编译为 bytecode
时可能会进行优化。
如果你真的想进一步优化你的代码,我建议你去看看:https://wiki.python.org/moin/PythonSpeed/PerformanceTips
PS:最终,您仍然可以进行自己的测试。使用您要测试的两种不同方法编写两个执行完全相同操作的函数,测量这些方法的执行时间并比较它们(小心,多次执行测试以减少不确定性)。
【讨论】:
以上是关于与 Python/Django 中的性能/效率相关的问题的主要内容,如果未能解决你的问题,请参考以下文章
Nginx + uWSGI + Python + Django部署实例