Python 从循环内部返回是一种好的做法吗
当我编写任何验证函数时,我会编写如下所示的代码 方法1Python 从循环内部返回是一种好的做法吗,python,loops,for-loop,return,Python,Loops,For Loop,Return,当我编写任何验证函数时,我会编写如下所示的代码 方法1 def func(): for section in sections: if section.has_timetable(): return True return False 但最近我在想,退出这样的函数是一种好的做法吗?采用这种方法会产生任何后果吗?如果是,应采用方法2 方法2 def func(): has_timetable = False for sect
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
是的,没关系!当然,您必须确保您确实得到了您想要的结果,但是如果您返回到一个循环中,则不会发生任何不好的情况。Return只传递结果,在循环中返回一些值实际上是很常见的。在您的例子中,它是一个布尔值,因此您可以返回true(或者可以将其视为1)或false(视为0)方法1比方法2更有效,因为它在找到匹配条件后立即返回。然而,就良好实践而言,我觉得最好有一个单一的返回语句。例如,如果要检查多个条件,则将有多个返回语句,这可能会使调试变得困难(假设您希望在代码中放置一个断点,以便在函数返回之前检查返回值。最终将在每个返回语句处放置断点)。为了避免这种情况,您可以稍微修改方法2代码,使其更高效,如下所示:
def func():
has_timetable = False
for section in sections:
if section.has_timetable():
has_timetable = True
break
return has_timetable
因此,您可以有多个
break
语句,而只有一个return
语句。调试时,只需在return
语句中放置一个断点。编写此语句的python方法如下
def has_timetable(sections):
for section in sections:
if section.has_timetable():
result = True
break
else:
result = False
return result
但是,你是打破僵局,然后返回还是提前返回,这是一个品味的问题;至少在这种情况下。此函数易于阅读和理解,因此,多个return
不会造成任何伤害。在具有多个返回的较长函数中,可能很难获得所有的退出点
我会选择对您更具可读性的内容。是的,提前返回通常是首选,而不是在不需要时必须完成对整个集合的迭代,除非有其他事情需要进行完整的迭代(找到最小值/最大值等)。抱歉,我忘了添加break,但是通过返回来打破循环可以吗?哦,如果你要打破循环并立即返回,就返回吧!感谢您的回答也可能:
any(s.在章节中有s的时间表)