# timeit

```%timeit:
Time execution of a Python statement or expression
```

`%timeit` is a commonly used magic command used for gauging the efficiency and speed of a function. Suppose we have two methods that return the same result, but we’re not exactly sure which one is more efficient (which is especially helpful if you’re not super familiar with Big O notation).

``````In : def square(x):
...:     return pow(x, 2)

In : square(2)
Out: 4

In : def square_alternative(x):
...:     return x * x

In : square_alternative(2)
Out: 4

In : %timeit square(2)
479 ns ± 15.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In : %timeit square_alternative(2)
130 ns ± 0.217 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
``````

In this example we can see that the `square_alternative()` is much faster than the `square()` function that uses Python’s builtin `pow()` function.

We can also use cell magic to only time certain aspects of a function if it requires some initial setup. Suppose we want to run the `square_alternative` function on a number that will be calculated, but we don’t want to include the initial calculation of `x`. We can do this using two `%` symbols, so it only times the last line:

``````In : import math

In : %%timeit x = math.pi * math.tau
...: square_alternative(x)
...:
...:
132 ns ± 1.54 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
``````