函数返回点和效率

function return points and efficiency

提问人:carlo 提问时间:10/28/2016 更新时间:10/28/2016 访问量:62

问:

因为我是一名统计学家,当我写一些代码时,我非常关心它的效率,现在我无法了解以下两种编码风格中是否有一种比另一种更有效(我会在 python 中展示它们):

def fun(args):
    out= False
    if control(args):
        out= True
    if second_control(args):
        out= True
    return out

或者也许:

def fun(args):
    if control(args):
        return True
    if second_control(args):
        return True
    return False

当然,我知道我可以用“and”运算符进行两个控制,但让我们坚持上面的代码:我一直认为返回点会破坏函数并节省时间,但我尝试了您可以看到的代码,我发现超过 10000 次迭代的第一个通常更快,超过 1000000 次迭代的第二个迭代更快。

有人可以解释为什么会这样吗?事实上,我甚至不确定我的测试是否值得信赖。

Python 性能 与语言无关 的返回

评论

0赞 deceze 10/28/2016
一个函数应该只有一个 return 语句吗?
0赞 deceze 10/28/2016
为什么一个或另一个会随着时间的推移而加速,对于分支预测和预热 JIT 优化器来说,可能有复杂的原因,这取决于代码的运行方式。要弄清楚哪个更适合您的用例,唯一真正的方法是对其进行基准测试,看看哪个更快。
3赞 khelwood 10/28/2016
这两个函数具有不同的行为。第一个总是调用 .这不仅仅是分支优化。second_control(args)
1赞 PM 2Ring 10/28/2016
凯尔伍德说了什么。为了获得准确的时间,您应该使用该模块。若要获取函数的较低级别视图,可以使用反汇编程序模块。timeitdis
1赞 bruno desthuilliers 10/28/2016
前面的评论没有太多要补充的,除了(假设你的第一个版本中的第二个版本真的应该是一个使两个函数等效的版本)第二个版本是最受欢迎的 Python 习语。wrt/性能(仍在假设等...)它真的不应该有太大的区别,所以我不会担心它,真的。ifelif

答: 暂无答案