[Python-ideas] add a time decorator to timeit.py

Steven D'Aprano steve at pearwood.info
Sun Oct 7 07:15:27 EDT 2018


On Sun, Oct 07, 2018 at 10:16:08AM +0000, Amjad Ben Hedhili wrote:

> I think that a time decorator will be a useful addition to the sandard 
> library, as i find the current way of measuring execution time a bit 
> tedious:
> 
> timeit.timeit("fun_to_time(a, b)", setup="from __main__ import a, b", number=1)

There are lots of ways to call timeit, but generally if you are calling 
it with number=1 then your results may not be trustworthy. (That depends 
on the function, of course.) There's a reason why timeit defaults to 
number=1000000 rather than 1.


> compared to:
> 
> @timef
> def fun_to_time(a, b):
>     ...

The problem with that as an API is that once you have decorated the 
function to call timeit, how do you use it *without* calling timeit?

If you use functools.wraps, there will be a func_to_time.__wrapped__ but 
I don't think that calling that directly is a good interface.


> or
> 
> timef(print)("Hello world!").
> 
> I already made a basic implementation of it, and it's working well.

Can you explain what the timef decorator does? What arguments does it 
take, how do we use it?


-- 
Steve


More information about the Python-ideas mailing list