Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从循环内部返回是一种好的做法吗_Python_Loops_For Loop_Return - Fatal编程技术网

Python 从循环内部返回是一种好的做法吗

Python 从循环内部返回是一种好的做法吗,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

当我编写任何验证函数时,我会编写如下所示的代码

方法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

是的,没关系!当然,您必须确保您确实得到了您想要的结果,但是如果您返回到一个循环中,则不会发生任何不好的情况。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的时间表)