为什么 itertools izip 比文档中的等效函数更快?
Why is itertools izip faster than equivalent function from documentation?
def izip(*iterables):
# izip('ABCD', 'xy') --> Ax By
iterators = map(iter, iterables)
while iterators:
yield tuple(map(next, iterators))
但是当我 运行 使用 itertools.izip
测试时它工作得更快,然后当我 运行 izip
从我的模块运行时。为什么会这样?我可以 运行 模块功能一样快吗?
计时器测试:
>>> t = Timer("dict(izip_2(keys,values))", "from __main__ import keys, values, izip_2")
>>> t2 = Timer("dict(itertools.izip(keys,values))", "from __main__ import keys, values")
>>>
>>> print min(t.repeat(5, 10000))
31.6810410023
>>> print min(t2.repeat(5, 10000))
2.50448894501
在我的 CPython 中,itertools
是用 C 编码的,而不是 Python:
In [1]: import itertools
In [2]: itertools.__file__
Out[2]: '.../lib/python2.7/lib-dynload/itertools.so'
通常,预编译的 C 往往比解释的更快 Python,所以这很可能是一个原因。
def izip(*iterables):
# izip('ABCD', 'xy') --> Ax By
iterators = map(iter, iterables)
while iterators:
yield tuple(map(next, iterators))
但是当我 运行 使用 itertools.izip
测试时它工作得更快,然后当我 运行 izip
从我的模块运行时。为什么会这样?我可以 运行 模块功能一样快吗?
计时器测试:
>>> t = Timer("dict(izip_2(keys,values))", "from __main__ import keys, values, izip_2")
>>> t2 = Timer("dict(itertools.izip(keys,values))", "from __main__ import keys, values")
>>>
>>> print min(t.repeat(5, 10000))
31.6810410023
>>> print min(t2.repeat(5, 10000))
2.50448894501
在我的 CPython 中,itertools
是用 C 编码的,而不是 Python:
In [1]: import itertools
In [2]: itertools.__file__
Out[2]: '.../lib/python2.7/lib-dynload/itertools.so'
通常,预编译的 C 往往比解释的更快 Python,所以这很可能是一个原因。