为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森卡 2019-12-17 15:03:46
假设我有一个if带有的语句return。从效率的角度来看,我应该使用if(A > B):    return A+1return A-1要么if(A > B):    return A+1else:    return A-1使用编译语言(C)或脚本语言(Python)时,我应该使用一种还是另一种?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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


两种形式的效率都相当,如果if条件为假,则基础机器代码必须执行跳转。


请注意,Python支持一种语法,该语法允许您仅使用一种return情况:


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


查看完整回答
反对 回复 2019-12-17
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

返回后请勿使用其他:


# Bad

if (foo)

  return 1

else

  return 2


# Good

if (foo)

  return 1

return 2


return 1 if foo else 2


查看完整回答
反对 回复 2019-12-17
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

关于编码风格:


无论哪种语言,大多数编码标准都禁止将单个函数中的多个return语句禁止作为不好的做法。


(尽管我个人会说在多种情况下多个返回语句确实有意义:文本/数据协议解析器,具有大量错误处理的功能等)


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


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,依次引用...:

IEC 61508-3。第3部分,表B.9。

IEC 61508-7。C.2.9。


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 2180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信