使用if-return-return或if-else-return更高效吗?

2024-04-19 14:39:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个带returnif语句。从效率的角度来看,我应该使用

if(A > B):
    return A+1
return A-1

或者

if(A > B):
    return A+1
else:
    return A-1

在使用编译语言(C)或脚本语言(Python)时,我应该选择一种还是另一种?


Tags: returnif语句脚本语言else角度效率编译语言
3条回答

由于return语句终止当前函数的执行,因此这两种形式是等价的(尽管第二种形式可能比第一种形式更具可读性)。

这两种形式的效率相当,如果if条件为false,底层机器代码必须执行跳转。

请注意,Python支持一种语法,在您的情况下只允许使用一个return语句:

return A+1 if A > B else A-1

来自Chromium's样式指南:

返回后不要使用else:

# Bad
if (foo)
  return 1
else
  return 2

# Good
if (foo)
  return 1
return 2

return 1 if foo else 2

关于编码风格:

大多数编码标准,不管是哪种语言,都禁止从一个函数返回多个语句,这是一种不好的做法。

(尽管我个人认为有几种情况下多个返回语句是有意义的:文本/数据协议解析器、具有大量错误处理的函数等)

所有这些行业编码标准的共识是,表达式应写成:

int result;

if(A > B)
{
  result = A+1;
}
else
{
  result = A-1;
}
return result;

关于效率:

上述例子和问题中的两个例子在效率上都是完全等价的。所有这些情况下的机器代码都必须比较A>;B,然后分支到A+1或A-1计算,然后将结果存储在CPU寄存器或堆栈中。

编辑:

资料来源:

  • MISRA-C:2004年第14.7条规则,依次引用了……:
  • 国际电工委员会61508-3。第3部分,表B.9。
  • 国际电工委员会61508-7。C、 2.9条。

相关问题 更多 >