我有一个带有多个参数的函数,其中一个是联系号码。提供给该功能的数据用于生成文档,如果选择了一个选项,则该文档立即以内联方式返回,其他选项获取联系号码并生成电子邮件。在此函数的原始版本中,联系号码在函数开始时立即被解析,但我将其移动到else块中,因为这是实际生成使用该联系号码的电子邮件的地方,我认为没有理由创建一个新变量,如果它没有被使用一半的时间。下面是一个例子,它使用Django框架在Python中构建:
def function(request, object, number=None):
obj = ObjectItem.objects.get(id=object)
# Originally number processed here
if request.method == 'POST':
if 'inline' in request.POST:
data = {
'object': obj,
}
return generate_document(data, inline=True)
else:
if number:
contact = '{}'.format(number)
else:
contact = obj.contact
data = {
'object': obj,
}
document = generate_document(data, inline=False)
return message(document, contact)
else:
return redirect()
在查看我的代码时,我意识到我可以在POST的内联处理和内联处理之外移动数据字典创建,但我不知道是否将数字参数的处理移动到else块中因为处理实际上节省了任何时间,或者是更标准的做事方式。我知道,由于Python是一种脚本语言,没有任何类型的优化可以自动执行,就像它们用编译语言重新排列那种声明一样,所以我正在寻找最有效的方法。
答案 0 :(得分:1)
从性能角度来看,无论是在data
之上还是在if
之上创建if
,都没有区别。 Python只会打一次,而dict只会创建一次。但出于设计原因,您应将其移至if
以上。
首先,不要重复 - 如果您可以在一个地方合理地实施一些代码,请不要将其洒在代码周围。假设您稍后决定defaultdict
更好,您只需在一个地方更改它。
其次,安置意味着意图。如果您将其置于if
之上,则表明您打算在任何地方使用该数据结构。在您当前的代码中,读者会问你做同样的问题......为什么不在if
之上呢?它有点琐碎,但阅读代码不应该提出更多问题。