在分支(Python)之后使用函数args是否更有效?

时间:2016-03-21 18:31:38

标签: python django

我有一个带有多个参数的函数,其中一个是联系号码。提供给该功能的数据用于生成文档,如果选择了一个选项,则该文档立即以内联方式返回,其他选项获取联系号码并生成电子邮件。在此函数的原始版本中,联系号码在函数开始时立即被解析,但我将其移动到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是一种脚本语言,没有任何类型的优化可以自动执行,就像它们用编译语言重新排列那种声明一样,所以我正在寻找最有效的方法。

1 个答案:

答案 0 :(得分:1)

从性能角度来看,无论是在data之上还是在if之上创建if,都没有区别。 Python只会打一次,而dict只会创建一次。但出于设计原因,您应将其移至if以上。

首先,不要重复 - 如果您可以在一个地方合理地实施一些代码,请不要将其洒在代码周围。假设您稍后决定defaultdict更好,您只需在一个地方更改它。

其次,安置意味着意图。如果您将其置于if之上,则表明您打算在任何地方使用该数据结构。在您当前的代码中,读者会问你做同样的问题......为什么不在if之上呢?它有点琐碎,但阅读代码不应该提出更多问题。