2015-01-10 6 views
1

documentation가 기록됩니다itertools izip이 설명서의 동등한 기능보다 왜 더 빠릅니까?

def izip(*iterables): 
    # izip('ABCD', 'xy') --> Ax By 
    iterators = map(iter, iterables) 
    while iterators: 
     yield tuple(map(next, iterators)) 

하지만 itertools.izip으로 테스트를 실행할 때 빠른 작동, 그럼 난 내 모듈에서 izip 기능을 실행할 때. 왜 이런 일이 일어나는 걸까요? 모듈 기능을 빨리 실행할 수 있습니까?

Thx.

편집 :

타이머 테스트 : 내 CPython의에서

>>> 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

어느 쪽이 빠름을 어떻게 결정 했습니까? – thefourtheye

+0

타이머 포함 >>> t = 타이머 ("dict (izip_2 (keys, values))", "__main__ 수입 키, 값, izip_2") >>> t2 = Timer ("dict (itertools.izip (keys (5, 10000)) 31.6810410023 >>> print min (t2.repeat (5, 10000)) >>> print min (t, 10000)) 2.50448894501 –

+0

질문을 편집하고 이러한 세부 정보도 함께 적어주십시오. – thefourtheye

답변

1

, itertools 오히려 파이썬보다 C로 코딩되어

In [1]: import itertools 

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

일반적으로 미리 컴파일 된 C 빠르게 해석보다 경향이있다 파이썬 때문에 이것이 하나의 이유가 될 수 있습니다.

+0

네가 맞다. 그것은 C [link] (http://svn.python.org/view/python/tags/r271/Modules/itertoolsmodule.c?view=markup)에서 작성되었습니다. 그것이 더 빠른 이유입니다. –