【问题标题】: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)

标签: python loops for-loop return


【解决方案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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-09
        • 2013-03-30
        • 2023-04-05
        • 2014-11-05
        • 1970-01-01
        • 2015-02-18
        • 2016-03-20
        • 2013-10-21
        相关资源
        最近更新 更多