Issue #17414: Add timeit, repeat, and default_timer to timeit.__all__.

Revise module docstring and update itertools import and use.
This commit is contained in:
Terry Jan Reedy 2013-03-15 03:04:25 -04:00
parent e95f7c3d27
commit d49af5dc2e
3 changed files with 20 additions and 28 deletions

View File

@ -31,38 +31,29 @@ treated similarly.
If -n is not given, a suitable number of loops is calculated by trying If -n is not given, a suitable number of loops is calculated by trying
successive powers of 10 until the total time is at least 0.2 seconds. successive powers of 10 until the total time is at least 0.2 seconds.
The difference in default timer function is because on Windows,
clock() has microsecond granularity but time()'s granularity is 1/60th
of a second; on Unix, clock() has 1/100th of a second granularity and
time() is much more precise. On either platform, the default timer
functions measure wall clock time, not the CPU time. This means that
other processes running on the same computer may interfere with the
timing. The best thing to do when accurate timing is necessary is to
repeat the timing a few times and use the best time. The -r option is
good for this; the default of 3 repetitions is probably enough in most
cases. On Unix, you can use clock() to measure CPU time.
Note: there is a certain baseline overhead associated with executing a Note: there is a certain baseline overhead associated with executing a
pass statement. The code here doesn't try to hide it, but you should pass statement. It differs between versions. The code here doesn't try
be aware of it. The baseline overhead can be measured by invoking the to hide it, but you should be aware of it. The baseline overhead can be
program without arguments. measured by invoking the program without arguments.
Classes:
Timer
Functions:
timeit(string, string) -> float
repeat(string, string) -> list
default_timer() -> float
The baseline overhead differs between Python versions! Also, to
fairly compare older Python versions to Python 2.3, you may want to
use python -O for the older versions to avoid timing SET_LINENO
instructions.
""" """
import gc import gc
import sys import sys
import time import time
try: import itertools
import itertools
except ImportError:
# Must be an older Python version (see timeit() below)
itertools = None
__all__ = ["Timer"] __all__ = ["Timer", "timeit", "repeat", "default_timer"]
dummy_src_name = "<timeit-src>" dummy_src_name = "<timeit-src>"
default_number = 1000000 default_number = 1000000
@ -180,10 +171,7 @@ class Timer:
to one million. The main statement, the setup statement and to one million. The main statement, the setup statement and
the timer function to be used are passed to the constructor. the timer function to be used are passed to the constructor.
""" """
if itertools:
it = itertools.repeat(None, number) it = itertools.repeat(None, number)
else:
it = [None] * number
gcold = gc.isenabled() gcold = gc.isenabled()
gc.disable() gc.disable()
try: try:

View File

@ -449,6 +449,7 @@ Eric Groo
Dag Gruneau Dag Gruneau
Filip Gruszczyński Filip Gruszczyński
Thomas Guettler Thomas Guettler
Anuj Gupta
Michael Guravage Michael Guravage
Lars Gustäbel Lars Gustäbel
Thomas Güttler Thomas Güttler
@ -1359,3 +1360,4 @@ Cheng Zhang
Kai Zhu Kai Zhu
Tarek Ziadé Tarek Ziadé
Peter Åstrand Peter Åstrand

View File

@ -280,6 +280,8 @@ Core and Builtins
Library Library
------- -------
- Issue #17414: Add timeit, repeat, and default_timer to timeit.__all__.
- Issue #1285086: Get rid of the refcounting hack and speed up - Issue #1285086: Get rid of the refcounting hack and speed up
urllib.parse.unquote() and urllib.parse.unquote_to_bytes(). urllib.parse.unquote() and urllib.parse.unquote_to_bytes().