从循环内部返回是一种好习惯[关闭]
Posted
技术标签:
【中文标题】从循环内部返回是一种好习惯[关闭]【英文标题】:Is it good practice to return from inside a loop [closed] 【发布时间】:2018-10-20 07:34:10 【问题描述】:当我编写任何验证函数时,我会编写如下所示的代码
方法 1。
def func():
for section in sections:
if section.has_timetable():
return True
return False
但最近我在想退出这样的功能是一种好习惯吗?这种做法会不会有什么后果,如果是的话应该按照方法2吗?
方法 2
def func():
has_timetable = False
for section in sections:
if section.has_timetable():
has_timetable = True
break
return has_timetable
【问题讨论】:
是的,早点返回通常是首选,而不是在不需要时完成对整个集合的迭代,除非有其他事情需要进行完整的迭代(找到最小/最大值等.) 抱歉我忘了加break,但是可以通过return来打破循环吗? 哦,好吧,如果您要跳出循环并立即返回,请返回! 感谢您的回答 也可以:any(s.has_timetable() for s in sections)
【参考方案1】:
pythonic 的写法是这样的
def has_timetable(sections):
for section in sections:
if section.has_timetable():
result = True
break
else:
result = False
return result
但是你是break
然后返回还是早点返回是个人喜好问题;至少在这种情况下。此功能易于阅读和理解,因此,多个return
没有害处。在具有多个返回的较长函数中,可能很难获得所有退出点。
我会选择更适合你阅读的东西。
【讨论】:
【参考方案2】:方法 1 比方法 2 更有效,因为它会在找到匹配条件后立即返回。但是,就良好实践而言,我觉得最好有一个单一的 return 语句。例如,如果您有多个条件要检查,将会有多个 return 语句,这会使调试变得困难(假设您想在代码中放置一个断点以在函数返回之前检查返回值。您最终会在每个返回声明。)。为避免这种情况,您可以稍微修改您的方法 2 代码以使其更高效,如下所示:
def func():
has_timetable = False
for section in sections:
if section.has_timetable():
has_timetable = True
break
return has_timetable
因此,您可以有多个break
语句,而只有一个return
语句。调试时,您只需在return
语句处放置一个断点。
【讨论】:
【参考方案3】:是的,没关系!当然,您必须确保您确实得到了您正在寻找的结果,但是如果您在循环内返回,则不会发生任何不好的事情。 Return 只是将结果传递给您,实际上在循环中返回一些值是很常见的。在您的情况下,它是一个布尔值,因此您返回 true(或者您可以将其视为 1)或 false(作为 0)
【讨论】:
以上是关于从循环内部返回是一种好习惯[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?