在判断了一些简单的测试之后,似乎从循环中断到结束生成器可能比引发StopIteration异常更快.如果标准且公认的停止发电机的方法使用异常,为什么会出现这种情况.source
In [1]: def f():
....: for i in range(1024):
....: yield None
....: break
....:
In [2]: def g():
....: for i in range(1024):
....: yield None
....: raise StopIteration
....:
In [3]: %timeit for i in f(): pass
1000000 loops, best of 3: 1.22 µs per loop
In [4]: %timeit for i in g(): pass
100000 loops, best of 3: 5.9 µs per loop
In [5]: %timeit for i in f(): pass
1000000 loops, best of 3: 1.22 µs per loop
In [6]: %timeit for i in g(): pass
100000 loops, best of 3: 5.82 µs per loop