Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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效率问题_Python_Django_Performance - Fatal编程技术网

Python Django效率问题

Python Django效率问题,python,django,performance,Python,Django,Performance,我想知道这是否会带来任何实际的效率差异(即计算时间、内存等) 这是我的模型: class FooUser(models.Model): name = models.CharField(max_length=50) sirname = models.CharField(max_length=50) 假设在视图中保存FooUser时有两种不同的方法: 首先,将检索到的值分配给变量,然后将其传递给对象 #say I retrieve name and sirname from use

我想知道这是否会带来任何实际的效率差异(即计算时间、内存等)

这是我的模型:

class FooUser(models.Model):
    name = models.CharField(max_length=50)
    sirname = models.CharField(max_length=50)
假设在视图中保存FooUser时有两种不同的方法: 首先,将检索到的值分配给变量,然后将其传递给对象

#say I retrieve name and sirname from users cookie.(lets not care for the exceptions for now.
input_name =request.session['name']
input_sirname =request.session['sirname']

FooUser(name=input_name,sirname=input_sirname).save()
第二个,直接作为参数传递:

#say I retrieve name and sirname from users cookie.(lets not care for the exceptions for now.
FooUser(name=request.session['name'],sirname=request.session['sirname']).save()
我知道这个问题可能有点愚蠢,但对于长时间的输入,将这些输入传递给对象会使代码几乎不可读:)

这:

 input_name =request.session['name']
 input_sirname =request.session['sirname']
未将字符串复制到变量。它只是将字符串对象的指针分配给本地字典中的名称(input\u name,input\u sirname)。为了更好的解释,你可以在以下位置获取战利品:

写这篇文章时,在99999%的情况下,拥有那些中间字典条目(input_name,input_sirname)的开销非常低,我敢打赌您的程序中还有一些其他瓶颈,您应该关注

记住:过早优化是万恶之源:-)

这是:

 input_name =request.session['name']
 input_sirname =request.session['sirname']
未将字符串复制到变量。它只是将字符串对象的指针分配给本地字典中的名称(input\u name,input\u sirname)。为了更好的解释,你可以在以下位置获取战利品:

写这篇文章时,在99999%的情况下,拥有那些中间字典条目(input_name,input_sirname)的开销非常低,我敢打赌您的程序中还有一些其他瓶颈,您应该关注


记住:过早优化是万恶之源:-)

我认为第二种方法(直接传递request.session元素)更具可读性。看着代码,我立刻知道发生了什么——它正在使用原始的、未修改的会话数据创建一个对象。如果它只是一个变量,我就不知道它从哪里来,如果它在这段时间内被修改过,等等,我将不得不阅读更多的代码。可以将语句拆分为多行

FooUser(
    name=request.session['name'],
    sirname=request.session['sirname']
).save()

我认为第二种方法(直接传递request.session元素)更具可读性。看着代码,我立刻知道发生了什么——它正在使用原始的、未修改的会话数据创建一个对象。如果它只是一个变量,我就不知道它从哪里来,如果它在这段时间内被修改过,等等,我将不得不阅读更多的代码。可以将语句拆分为多行

FooUser(
    name=request.session['name'],
    sirname=request.session['sirname']
).save()

将本地名称绑定到值所需的时间,例如,
input\u name=request.session['name']
,与执行
.save()
本身所需的时间相比,是完全可以忽略不计的--您永远无法测量它。因此,忘记这些小的效率,专注于风格、健壮性和可维护性(在您的示例中,这两种情况都很好)——如果需要调整应用程序的速度,请从分析它开始。

将本地名称绑定到值所需的时间,例如,
input\u name=request.session['name']
,与执行
.save()
本身所花费的时间相比,它是完全可以忽略不计的——您永远无法测量它。因此,忘掉这些小效率,专注于风格、健壮性和可维护性(在您的示例中,这两种情况都很好)——如果您需要调整应用程序的速度,请从分析它开始。

@Ludwik Trammer:这听起来是个答案。请把它作为一个答案贴出来,这样我们就可以正确地投票了。@S.Lott:好的,我现在已经投票了。我最初没有这样做,因为它没有回答最初的问题(效率),但如果你认为我应该这样做,那么当然,为什么不呢。顺便说一句,你可以对评论进行投票。@Ludwik-Trammer:听起来是个答案。请把它作为一个答案贴出来,这样我们就可以正确地投票了。@S.Lott:好的,我现在已经投票了。我最初没有这样做,因为它没有回答最初的问题(效率),但如果你认为我应该这样做,那么当然,为什么不呢。顺便说一句,你可以上传评论。