与Python / Django中的性能/效率相关的问题

时间:2014-07-04 18:55:20

标签: python django python-2.7

几天前我几乎没有什么问题困扰着我。我是初学者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 个答案:

答案 0 :(得分:0)

这是一个非常有趣的问题,但我认为你没有问这个问题。通过这种优化获得的性能可以忽略不计,特别是如果您使用少量元素。

另一方面,真正重要的是易于阅读代码并且清晰。

def myview(request):
    d = {'username':"xyz12",'city':"TA",'name':"xyz",...}
    u = User(**d)
    u.save()

例如,这个代码一开始就不容易阅读和理解。它需要在找到实际功能之前先考虑一下。除非你需要中间步骤,否则不要这样做。

对于4th点,我会选择第一个解决方案,更加清晰(它避免了通过在循环中调用相同函数而创建的函数调用开销)。您还可以使用更专业的功能来获得更好的表现,例如reduce(请参阅此答案:https://stackoverflow.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:最终,您仍然可以自己进行测试。使用您要测试的两种不同方法编写两个完全相同的函数,测量这些方法的执行时间并进行比较(小心,多次测试以减少不确定性)。