当我编写任何验证函数时,我编写代码如下所示
方法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
答案 0 :(得分:1)
是的,没关系!当然,你必须确保你真正得到你想要的结果,但如果你回到循环中,没有什么不好的事情发生。返回只是将结果传递给你,并且在循环中返回一些值实际上是常见的。在你的情况下,它是一个布尔值,所以你返回true(或者你可以看到它为1)或false(作为0)
答案 1 :(得分: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 :(得分:0)
方法1与方法2相比更有效,因为它一找到匹配条件就会返回。但是,就良好做法而言,我觉得最好有一份退货声明。例如,如果你有多个条件需要检查,那么会有多个return语句,这会使调试变得困难(想象你想在代码中放一个断点来检查函数返回之前的返回值。你最终会在每个语句中放置断点退货声明。)为避免这种情况,您可以稍微修改一下Approach 2代码,使其更有效,如下所示:
def func():
has_timetable = False
for section in sections:
if section.has_timetable():
has_timetable = True
break
return has_timetable
因此,您可以拥有多个break
语句和一个return
语句。在调试时,您必须在return
语句中只放置一个断点。