比方说,有一个函数什么也不返回,其中有一个循环。在某个时候,函数调用必须完成(在循环中)。要清楚,循环总是会重复多次。有两种方法可以做到:
1.end循环与break
:
def func():
while True:
do_smth....
if condition:
break
2。立即结束return
函数调用:
def func():
while True:
do_smth....
if condition:
return
这些功能的实际作用应该没有什么区别,但是哪种方法更有效?
答案 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表示法)。唯一可以合理回答该问题的情况是,break
或return
是在循环中的哪个位置,并且由于过程> O(n ),您break
经历了很多次,这确实是一种罕见的情况,并且清楚地表明了不良设计。从其他答案中可以看出,即使在这种情况下,它也不会对您的代码产生很大的影响。
现在,假设“最优”通常是指代码,那么选择的两个选项都根本不好。通常,该代码段应翻译为
def func():
while not condition:
do_smth....
为了便于阅读,在非常的特定情况下使用了中断/空返回,出于效率原因,我不会说。