yya*_*ian 1 python performance iterator list
我想知道为什么迭代列表要比Python 2.7中的迭代器慢得多。以下是示例代码和输出。
import timeit
stmt = """
for i in range(1000000):
pass
"""
print "================for loop with list=================="
t = timeit.Timer(stmt)
print min(t.repeat(3, 100))
print "================for loop with iterator=================="
stmt = """
for i in seq:
pass
"""
t = timeit.Timer(stmt, setup = "seq = iter(range(1000000))")
print min(t.repeat(3, 100))
Run Code Online (Sandbox Code Playgroud)
输出:
================for loop with list==================
2.61899293756
================for loop with iterator==================
0.0191696885382
Run Code Online (Sandbox Code Playgroud)
似乎在迭代器上进行迭代比在列表上进行迭代快十倍以上。
迭代器测试会在第一次运行时耗尽迭代器。所有进一步的运行都会立即结束循环,这很快。如果不是因为3个timeit调用中的每个调用repeat都会重新执行设置代码的事实,则迭代器计时会更快。
如果我们在每次运行时重新生成迭代器:
>>> timeit.timeit('for i in seq: pass', 'seq=range(1000000)', number=100)
2.4989398827775986
>>> timeit.timeit('for i in iter(seq): pass', 'seq=range(1000000)', number=100)
2.543197477789299
Run Code Online (Sandbox Code Playgroud)
差异消失了。