Skip to content

Commit 8c3f882

Browse files
committed
Update timeit.Timer documentation.
Documentations updates are based on Issue 42765 discussion, with the intent of better describing the Timer class, how to use it, limitations of the parameters, etc.
1 parent 466643f commit 8c3f882

File tree

1 file changed

+36
-28
lines changed

1 file changed

+36
-28
lines changed

Doc/library/timeit.rst

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -98,47 +98,55 @@ The module defines three convenience functions and a public class:
9898

9999
.. class:: Timer(stmt='pass', setup='pass', timer=<timer function>, globals=None)
100100

101-
Class for timing execution speed of small code snippets.
102-
103-
The constructor takes a statement to be timed, an additional statement used
104-
for setup, and a timer function. Both statements default to ``'pass'``;
105-
the timer function is platform-dependent (see the module doc string).
106-
*stmt* and *setup* may also contain multiple statements separated by ``;``
107-
or newlines, as long as they don't contain multi-line string literals. The
108-
statement will by default be executed within timeit's namespace; this behavior
109-
can be controlled by passing a namespace to *globals*.
110-
111-
To measure the execution time of the first statement, use the :meth:`.timeit`
112-
method. The :meth:`.repeat` and :meth:`.autorange` methods are convenience
113-
methods to call :meth:`.timeit` multiple times.
114-
115-
The execution time of *setup* is excluded from the overall timed execution run.
116-
117-
The *stmt* and *setup* parameters can also take objects that are callable
118-
without arguments. This will embed calls to them in a timer function that
119-
will then be executed by :meth:`.timeit`. Note that the timing overhead is a
120-
little larger in this case because of the extra function calls.
101+
Class for timing execution speed of small code snippets. A Timeit instance
102+
will contain a function (see :meth:`Timer.timeit`) that executes a snippet of
103+
*setup* code once and then times some number of executions of *stmt* code. The
104+
code snippets, given as arguments *setup* and *stmt* when creating the
105+
instance, may be either strings or callable objects.
106+
107+
If *setup* or *stmt* is provided as a string, it may contain a python
108+
expression, statement, or multiple statements separated by ";" or newlines.
109+
Whitespace adhering to the usual Python indentation rules must follow any
110+
newlines.
111+
112+
If *setup* or *stmt* is a callable object, (often a function), the object is
113+
called with no arguments. Note that the timing overhead is a little larger in
114+
this case because of the extra function calls required.
115+
116+
The *setup* and *stmt* parameters default to 'pass'. The *timer* parameter
117+
defaults to a platform-dependent timer function (see the module doc string).
118+
119+
When *setup* and *stmt* are run, they are run in a different namespace than
120+
that of the code that calls :meth:`Timer.timeit()`. To give *stmt* (whether it
121+
is a callable name or code string) access to objects defined in the code that
122+
calls timeit, *setup* can import any needed objects. For example, if your code
123+
defines function ``testfunc()``, *setup* can contain, ``from __main__ import
124+
testfunc``, and code in *stmt* can then call ``testfunc``.
125+
126+
To measure the execution time of *stmt*, use the :meth:`Timer.timeit()` method.
127+
The :meth:`Timer.repeat()` method is a convenience to call :meth:`Timer.timeit()`
128+
multiple times and return a list of results.
121129

122130
.. versionchanged:: 3.5
123131
The optional *globals* parameter was added.
124132

125133
.. method:: Timer.timeit(number=1000000)
126134

127-
Time *number* executions of the main statement. This executes the setup
128-
statement once, and then returns the time it takes to execute the main
129-
statement a number of times. The default timer returns seconds as a float.
135+
Time *number* executions of the main snippet. This executes the setup
136+
snippet once, and then returns the time it takes to execute the main
137+
snippet a number of times. The default timer returns seconds as a float.
130138
The argument is the number of times through the loop, defaulting to one
131-
million. The main statement, the setup statement and the timer function
139+
million. The main snippet, the setup snippet and the timer function
132140
to be used are passed to the constructor.
133141

134142
.. note::
135143

136144
By default, :meth:`.timeit` temporarily turns off :term:`garbage
137-
collection` during the timing. The advantage of this approach is that
138-
it makes independent timings more comparable. The disadvantage is
145+
collection` during the timing. The advantage of this approach is that
146+
it makes independent timings more comparable. The disadvantage is
139147
that GC may be an important component of the performance of the
140-
function being measured. If so, GC can be re-enabled as the first
141-
statement in the *setup* string. For example::
148+
function being measured. If so, GC can be re-enabled as the first
149+
snippet in the *setup* string. For example::
142150

143151
timeit.Timer('for i in range(10): oct(i)', 'gc.enable()').timeit()
144152

0 commit comments

Comments
 (0)