Python: How to use the ‘timeit’ module for multiple lines?

It is very useful to time small snippets of python code.

For example, you might want to do that to debug performance bottlenecks or to compare the efficiencies of different ways to perform a task.

The timeit module is a handy python module that allows you to do just that.

Even though it is pretty straight forward to use this module to time one-line statements, you might find it a little tricky to time multiple-line statements.

In this article, I will teach you how to use this awesome python module to time multiple lines.

But before we dive into how to do that, let’s revisit the different ways you can use the timeit module.

for example, say you want to time this statement

L = [2 ** n for n in range(10)]

There are two ways you can do this

First: From python code

In your python code, you can jump import the module and use the timeit method.

>>> import timeit
>>> timeit.timeit('L = [2 ** n for n in range(10)]')
3.0072080040117726

Second: From the command line interface

Another way is to just invoke the timeit module from the shell like this

$ python3 -m timeit 'L = [2 ** n for n in range(10)]'
100000 loops, best of 3: 2.99 usec per loop

Seems pretty straightforward, right?

Now how can you use the timeit module to time a snippet of python code that spans multiple lines?

Let’s discuss how you can do that from python code and from the command line interface.

Timing multiple lines in python code

Timing multiple-line code snippets frome python code is very simple

Same indentation

The easiest way to time multiple lines having the same indentation is to use semicolons to separate the lines.

For example, say you want to time the following snippet.

x = 2
L = [x ** n for n in range(10)]

your code will look like this

>>> import timeit
>>> timeit.timeit('x = 2; L = [x ** n for n in range(10)]')
3.0759821450337768

Easy peasy!

But what if your code have different indentations?

Different indentations

The easiest way to handle different indentations is to to define your code snippet as a string first using triple quotes.

The reason why you should use triple quotes is because it allows you to define strings that can span multiple lines.

For example, you can do something like this

import timeit
s = """\
L = []
for n in range(10):
    L.append(2 ** n)"""
t = timeit.timeit(s)

Prefect, now let’s discuss how you can do the same thing but from the command line interface.

Timing multiple lines in the command-line interface

Same indentation

For multiple lines that have the same indentation, you can still use semicolons like you did in the previous case.

$ python3 -m timeit 'x = 2; L = [x ** n for n in range(10)]'
100000 loops, best of 3: 3.07 usec per loop

But this is not the only way.

You can also specify each line as a separate statement argument like this

$ python3 -m timeit 'x = 2' 'L = [x ** n for n in range(10)]'
100000 loops, best of 3: 3.03 usec per loop

This separation of statements into different arguments allows us to specify indentations as well.

Let’s see how.

Different indentations

For multiple lines with different indentations, you specify each line as a separate argument and you also preserve the leading spaces.

For example, to time

L = []
for n in range(10):
    L.append(2 ** n)

you can do something like this:

$ python3 -m timeit \
'L = []' 'for n in range(10):' '    L.append(2 ** n)'
100000 loops, best of 3: 3.47 usec per loop

Learning Python?

If you are a beginner, then I highly recommend this book.

No longer a beginner?

Then you are ready for this book to get to the next level (It’s my favorite).

2018-11-19T01:15:31+00:00 By |

Leave A Comment