为什么itertools比文档中的等效函数更快?

时间:2015-01-10 10:22:17

标签: python itertools built-in

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

1 个答案:

答案 0 :(得分:2)

在我的CPython中,itertools是用C而不是Python编写的:

In [1]: import itertools

In [2]: itertools.__file__
Out[2]: '.../lib/python2.7/lib-dynload/itertools.so'

通常,预编译的C往往比解释的Python更快,所以这可能是一个原因。