最佳循环功能退出

时间:2019-10-28 08:53:07

标签: python function loops

比方说,有一个函数什么也不返回,其中有一个循环。在某个时候,函数调用必须完成(在循环中)。要清楚,循环总是会重复多次。有两种方法可以做到:

1.end循环与break

def func():
    while True:
        do_smth....
        if condition:
            break

2。立即结束return函数调用:

def func():
    while True:
        do_smth....
        if condition:
            return

这些功能的实际作用应该没有什么区别,但是哪种方法更有效?

3 个答案:

答案 0 :(得分:1)

使用timeit.timeit运行'count to 10'循环10百万次,表明直接return的运行速度稍快,因此应该是可行的方式。

答案 1 :(得分:1)

这两种方法之间的差异是继承其用途的。

break语句旨在在循环内使用,并在到达break时停止迭代。

return语句旨在停止函数执行并返回值。

时间上的差异是由进入break / return开始的过程引起的;您可以在指令级别看到这些语句执行不同的操作->导致不同的计时:

import dis

def x():
    while True:
        return

def y():
    while True:
        break


print(dis.dis(x))
print(dis.dis(y))

输出为: 为x

4           0 SETUP_LOOP               4 (to 6)

  5           2 LOAD_CONST               0 (None)
              4 RETURN_VALUE
        >>    6 LOAD_CONST               0 (None)
              8 RETURN_VALUE

y

  8           0 SETUP_LOOP               6 (to 8)

  9     >>    2 BREAK_LOOP
              4 JUMP_ABSOLUTE            2
              6 POP_BLOCK
        >>    8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

因此,很明显,如果您仅比较虚拟示例中的差异,您给出的return将会更快。

答案 2 :(得分:0)

最优用于描述代码的最佳性能(big-O表示法)。唯一可以合理回答该问题的情况是,breakreturn是在循环中的哪个位置,并且由于过程> O(n ),您break经历了很多次,这确实是一种罕见的情况,并且清楚地表明了不良设计。从其他答案中可以看出,即使在这种情况下,它也不会对您的代码产生很大的影响。

现在,假设“最优”通常是指代码,那么选择的两个选项都根本不好。通常,该代码段应翻译为

def func():
    while not condition:
        do_smth....
为了便于阅读,在非常的特定情况下使用了

中断/空返回,出于效率原因,我不会说。