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:好的,我现在已经投票了。我最初没有这样做,因为它没有回答最初的问题(效率),但如果你认为我应该这样做,那么当然,为什么不呢。顺便说一句,你可以上传评论。