与 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?)。

1st3rd 点通常取决于您的喜好,因为两者非常相似,并且无论如何编译为 bytecode 时可能会进行优化。

如果你真的想进一步优化你的代码,我建议你去看看:https://wiki.python.org/moin/PythonSpeed/PerformanceTips

PS:最终,您仍然可以进行自己的测试。使用您要测试的两种不同方法编写两个执行完全相同操作的函数,测量这些方法的执行时间并比较它们(小心,多次执行测试以减少不确定性)。

【讨论】:

以上是关于与 Python/Django 中的性能/效率相关的问题的主要内容,如果未能解决你的问题,请参考以下文章

python django模型到dict(与相关模型)

Python django-05 模板层

python----django

Nginx + uWSGI + Python + Django部署实例

Python / Django 中的 Unicode 与 UTF-8 混淆?

python-- Django