python if return_python - 使用if-return-return或if-else-return更有效?
python - 使用if-return-return或if-else-return更有效?
假设我的if声明带有return。从效率的角度来看,我应该使用
if(A > B):
return A+1
return A-1
要么
if(A > B):
return A+1
else:
return A-1
在使用编译语言(C)或脚本语言(Python)时,我应该更喜欢一个还是另一个?
9个解决方案
136 votes
由于return语句终止了当前函数的执行,因此这两种形式是等效的(尽管第二种形式可以说比第一种形式更具可读性)。
两种形式的效率相当,如果return条件为假,则底层机器代码必须执行跳转。
请注意,Python支持的语法允许您在您的情况下只使用一个return语句:
return A+1 if A > B else A-1
Frédéric Hamidi answered 2019-07-22T12:03:55Z
27 votes
来自Chromium的风格指南:
退货后请勿使用其他:
# Bad
if (foo)
return 1
else
return 2
# Good
if (foo)
return 1
return 2
return 1 if foo else 2
skeller88 answered 2019-07-22T12:04:26Z
5 votes
关于编码风格:
大多数编码标准无论语言禁止多个单一函数的返回语句都是不好的做法。
(虽然我个人会说有几种情况,多个return语句确实有意义:文本/数据协议解析器,具有广泛错误处理的函数等)
所有这些行业编码标准的共识是表达式应写成:
int result;
if(A > B)
{
result = A+1;
}
else
{
result = A-1;
}
return result;
关于效率:
上述示例和问题中的两个示例在效率方面都完全相同。 所有这些情况下的机器代码必须比较A> 1。 B,然后分支到A + 1或A-1计算,然后将其结果存储在CPU寄存器或堆栈中。
编辑:
资料来源:
MISRA-C:2004年规则14.7,反过来引用......:
IEC 61508-3。 第3部分,表B.9。
IEC 61508-7。C.2.9。
Lundin answered 2019-07-22T12:05:59Z
3 votes
有了任何合理的编译器,你应该没有区别; 它们应该编译成相同的机器代码,因为它们是等效的。
Oliver Charlesworth answered 2019-07-22T12:06:23Z
1 votes
版本A更简单,这就是我使用它的原因。
如果您打开Java中的所有编译器警告,您将在第二个版本上收到警告,因为它是不必要的并且会增加代码复杂性。
juergen d answered 2019-07-22T12:06:56Z
1 votes
我个人尽可能避免使用else块。 请参阅Anti-if Campaign
此外,他们不会为线路收取额外费用,你知道:p
“简单比复杂更好”& “可读性为王”
delta = 1 if (A > B) else -1
return A + delta
percebus answered 2019-07-22T12:07:36Z
0 votes
我知道问题是标记为python,但是它提到了动态语言,所以我认为我应该提到在ruby中if语句实际上有一个返回类型所以你可以做类似的事情
def foo
rv = if (A > B)
A+1
else
A-1
end
return rv
end
或者因为它也有简单的隐含回报
def foo
if (A>B)
A+1
else
A-1
end
end
这很好地解决了没有多次退货的风格问题。
Jamie Cook answered 2019-07-22T12:08:16Z
0 votes
可以这样想:
if (a > b):
output = a + 1
output = a - 1
return output
对此:
if (a > b):
output = a + 1
else:
output = a - 1
return output
第一个例子是无功能的,而第二个例子工作正常。 它们具有相同的性能,因此我建议您使用示例2,因为在我看来它更容易阅读。
Juniorized answered 2019-07-22T12:08:51Z
-1 votes
这是一个风格(或偏好)的问题,因为口译员并不关心。 就个人而言,我会尽量不做一个函数的最终语句,该函数在函数库以外的缩进级别返回一个值。 示例1中的else模糊了(如果只是轻微的话)函数结尾的位置。
我倾向于使用:
return A+1 if (A > B) else A-1
因为它遵循将单个return语句作为函数中的最后一个语句(如上所述)和避免命令式样式中间结果的良好函数式编程范式的良好约定。
对于更复杂的函数,我更喜欢将函数分解为多个子函数,以避免在可能的情况下过早返回。 否则我将恢复使用名为rval的命令式样式变量。 我尽量不使用多个return语句,除非函数是微不足道的,或者结尾之前的return语句是由于错误。 过早地回归会突显出你无法继续下去的事实。 对于旨在分支到多个子函数的复杂函数,我尝试将它们编码为case语句(例如由dict驱动)。
一些海报提到了运作速度。 运行速度对我来说是次要的,因为如果你需要执行速度,Python不是最好用的语言。 我使用Python作为编码的效率(即编写无错代码)对我来说很重要。
Stephen Ellwood answered 2019-07-22T12:09:46Z
python if return_python - 使用if-return-return或if-else-return更有效?相关推荐
- python中return_Python 中return用法及意义
1.python 中 return用法 The key word "return" which should be used only in a function in Pytho ...
- python函数几个return语句_Python常用函数--return 语句-阿里云开发者社区
在Python教程中return 语句是函数中常用的一个语句. return 语句用于从函数中返回,也就是中断函数.我们也可以选择在中断函数时从函数中返回一个值. 案例(保存为 function_re ...
- c语言中return语句例子,C语言 return 语句-嗨客网
C语言return语句教程 在 如果 return 语句使用在普通的 C语言return语句详解 语法 void fun(){ //do something return; } 说明 使用 retur ...
- C/C++ return 如何实现的?return 的内部机制
本篇博客,我们来看看,在C/C++里面函数的return 关键字究竟做了什么工作,我们从return 基本的数据类型 像int/char/void */,到带构造函数的类,一步步分析. return ...
- 在c语言中通过return语句,c语言中return的用法
c语言中return的用法 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return语句返回. return 语句的一般形式为:return 表达式; 或者:retu ...
- python归并排序理解不了_一日一技:如何更好地理解归并排序?
一日一技:如何更好地理解归并排序? 摄影:产品经理 厨师:kingname 请确保你已经看了我昨天的公众号文章.昨天的内容是今天的基础. 一日一技:在 Python 里面如何合并多个有序列表并使得结果 ...
- 自学python能干些什么副业-揭秘!女程序员为啥更赚钱?这4个大招,用Python做副业躺赚...
原标题:揭秘!女程序员为啥更赚钱?这4个大招,用Python做副业躺赚 关于穷,去年有了一个更学术的说法:隐形贫困人口. 就是因为有太多"种草达人",让我们为了物质生活超前消费,再 ...
- python socket读取数据不能解析_通过实例解析return运行原理,除了quot;生孩子quot;python真是无所不能啊...
文章内容主要介绍了通过实例解析Python return运行原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! return 语句就是讲结果返 ...
- python中return函数换行_Python中return的用法
python语言中,在调用函数的时候,为了使得函数返回我们想要的值,就需要python中的return来解决此问题.对于return的使用有以下需要注意的事项. (1)return语句是python语 ...
- python的return怎么用_python中return如何使用
python中return如何使用 发布时间:2020-09-02 11:44:06 来源:亿速云 阅读:81 作者:小新 这篇文章主要介绍了python中return如何使用,具有一定借鉴价值,需要 ...
最新文章
- linux nacos启动_nacos初体验-踩坑与填坑篇
- python的开发环境有哪些系统_Win10下配置机器学习python开发环境
- [PAT乙级]1009 说反话
- 定期定量采购_企业常见的六种采购策略
- maven工程使用spring-boot-devtools进行热部署,更改代码避免重启web容器
- android activity焦点,android启动activity文本框不获得焦点
- flask mysql 配置文件_Flask配置文件
- 标准输入输出详解(C++)
- C++——模板(超详细的模板解析)
- 法语语音教学课件下载
- 机器学习中的统计学基础知识
- 一位10年 Java 工作经验的架构师聊 Java 和工作经验
- 关于goole IO大会发布的android M和android studio1.3的更新
- word中审阅和修订、批注
- 立创EDA布线使用技巧
- 国内五款好用的开源建站系统
- 全球与中国沸石吸附剂市场深度研究分析报告
- 如何刷纯净线刷包?纯净线刷的教程以及刷机工具
- 2013时尚答卷吸金女王吴莫愁打牌代言超王菲
- 为统一规划思想、知识、事情而设计的笔记软件
热门文章
- UE4 Datasmith 格式简述
- 简易计算器的c++实现
- 上位机发送FINS UDP命令读写欧姆龙PLC数据
- Python学习——使用ReportLab生成带表格和图文的PDF
- 基于hilbert变换的数字信号_基于Hilbert变换数字调相信号解调算法研究.doc
- Multisim卸载后重新安装不上解决方案
- java运行环境简称_java程序的运行环境简称为什么?
- 时频分析matlab实例,Matlab时频分析工具箱及仿真案例
- 如何认识和处理ISO14001标准中“相关方”概念(转载)
- Python2.7利用xpath爬取韩寒博客(多线程版)