Reputation: 2612
Is there any way to use the timeit function to output both the function result and the time it took to process at the same time?
Right now I am using
timer = Timer('func()', 'from __main__ import func')
print timer.timeit(1)
But this just outputs the time and not the program output, which returns something at its end. I want it to output
FuncOutputGoesHere 13.2897528935
on the same line.
Ideally, I'd like to be able to take an average of the program by running it N times and then outputting the program result and its average time (a total of one output overall)
Upvotes: 15
Views: 8287
Reputation: 1125058
Two options:
Include 'print' in your timed code. Ugly, but hey.
timer = Timer('print func()', 'from __main__ import func')
print timer.timeit(1)
If all you do is run your function once, then dispense with the timeit
module altogether and time the code directly using the same method:
import sys
import time
if sys.platform == "win32":
# On Windows, the best timer is time.clock()
default_timer = time.clock
else:
# On most other platforms the best timer is time.time()
default_timer = time.time
t0 = default_timer()
output = func()
t1 = default_timer()
print output, t1 - t0
If you want to run the code multiple times, and produce the output, why not run the code once outside the timeit function? You are calling it more than once then already anyway:
timer = Timer('func()', 'from __main__ import func')
print timer.timeit(100),
print func()
Upvotes: 19
Reputation: 102039
The timeit module executes the statement passed. You could just print the result of the function:
timer = Timer('print func()', 'from __main__ import func')
print timer.timeit(1)
Upvotes: 0