2009-08-10 4 views
14

timeit() 외부에서 아래 코드를 실행하면 즉각적으로 완료되는 것처럼 보입니다. 그러나 timeit() 함수 내에서 실행하면 훨씬 오래 걸립니다. 왜?python : slow timeit() function

>>> import timeit 
>>> t = timeit.Timer("3**4**5") 
>>> t.timeit() 
16.55522028637718 

사용 : 파이썬 3.1 (86) - AMD 애슬론 64 X2 - WINXP timeit() 기능은 코드를 여러 번 (기본 백만)를 실행하고 평균 소요

+0

페이징 Alex Martelli, Alex Martelli, 제발 python timeit 모듈에 대해 의견을 말하십시오 ... – hughdbrown

+0

RichieHindle은 내가 오프라인 일 때 이미 제대로 해냈습니다. 그리고, 나는 항상 "파이썬 -mtimeit"을 사용한다. 대화 형 인터프리터 나 프로그램 내에서 결코 시간을 보내지 않는다 ;-) –

답변

26

(32 비트) 타이밍.

이 작업을 수행 한 번만 코드를 실행하려면 :

t.timeit(1) 

을하지만 그건 당신에게 왜곡 된 결과를 얻을 수 - 그것은 좋은 이유에 대해 반복.

루프 당 반복 시간을 얻으려면 결과를 루프 수로 나눕니다. 1 백만이 너무 많으면 반복 횟수에 더 작은 값을 사용하십시오.

count = 1000 
print t.timeit(count)/count 
+6

예! 또한 모듈로 timeit 대신 명령 행에서'python -mtimeit'을 사용하는 것을 권장합니다. 커맨드 라인 버전은 모듈에서 얻지 못하는 너무나 많은 작은 것들을 가지고 있습니다. 느리고/빠르다는 것은 당신이 측정하고있는 것입니다 : 예를 들면 훌륭한 마이크로 벤치 마크 기술, 모듈이 제공하지 않는 동정 등 - 등등. –

+0

@Alex 여기에 귀하의 의견은 분명하지 않습니다. CLI에서 사용할 수있는 추가 기능을 명확히 할 수 있습니까? – Tshepang

+1

@Tshepang : CLI는 timeit의 반복 횟수를 "마술처럼"선택합니다. 속도가 느린 코드는 측정 속도가 빠르며 코드가 빠르면 빠르며 코드가 매우 빠르면 정확도와 결과를 얻는 데 걸리는 시간의 균형을 잘 잡습니다. –

6

timeit은 기본적으로 100 만회 실행이므로. 요점은 마이크로 벤치 마크를하는 것이고 짧은 이벤트의 정확한 타이밍을 얻는 유일한 방법은 여러 번 반복하는 것입니다.

3

docs에 따르면 Timer.timeit()은 기본적으로 사용자 코드를 백만 번 실행합니다. "number"매개 변수를 사용하여이 기본값을 변경하십시오.

t.timeit(number=100) 

예를 들면 다음과 같습니다.

2

Timeit은 기본적으로 100 만 회 실행됩니다.

운영 명령 문제가있을 수도 있습니다 : (3**4)**5 != 3**4**5.

+0

감사합니다. 매우 도움이됩니다. 그리고 네, 의도 된 작업 순서였습니다. –