分支后使用函数参数是否更有效(Python)



我有一个函数,它接受几个参数,其中一个是联系电话。提供给函数的数据用于生成文档,如果选择一个选项,该文档将立即内联返回,其中另一个选项获取联系电话并生成电子邮件。在此函数的原始版本中,联系电话在函数开始时立即被解析,但我将其移动到 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 中内联与无内联的处理之外,但我不知道在该处理中将 number 参数的处理移动到 else 块中是否真的节省了任何时间还是更标准的做事方式。我知道由于 Python 是一种脚本语言,因此没有任何优化会像在编译语言中重新排列这种声明那样自动执行,所以我正在寻找最有效的方法来做到这一点。

从性能的角度来看,无论是在if上方还是在if中创建data都没有区别。Python 只会上线一次,字典只会创建一次。但是出于设计原因,您应该将其移动到if上方。

首先,不要重复自己 - 如果你可以在一个地方合理地实现一些代码,不要把它撒在你的代码周围。假设您以后决定defaultdict更好,您只需在一个地方更改它。

其次,放置意味着意图。如果你把它放在你的if你已经声明你计划在任何地方都使用该数据结构。在你当前的代码中,读者会问你同样的问题......为什么没有高于if?这有点微不足道,但代码的阅读不应该引起更多问题。

最新更新