从循环内部返回是一种好习惯

时间:2018-05-10 05:18:54

标签: 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 section in sections:
        if section.has_timetable():
            has_timetable = True
            break
    return has_timetable

3 个答案:

答案 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语句中只放置一个断点。