Note that there are some explanatory texts on larger screens.

plurals
  1. POtimeit versus timing decorator
    text
    copied!<p>I'm trying to time some code. First I used a timing decorator:</p> <pre><code>#!/usr/bin/env python import time from itertools import izip from random import shuffle def timing_val(func): def wrapper(*arg, **kw): '''source: http://www.daniweb.com/code/snippet368.html''' t1 = time.time() res = func(*arg, **kw) t2 = time.time() return (t2 - t1), res, func.__name__ return wrapper @timing_val def time_izip(alist, n): i = iter(alist) return [x for x in izip(*[i] * n)] @timing_val def time_indexing(alist, n): return [alist[i:i + n] for i in range(0, len(alist), n)] func_list = [locals()[key] for key in locals().keys() if callable(locals()[key]) and key.startswith('time')] shuffle(func_list) # Shuffle, just in case the order matters alist = range(1000000) times = [] for f in func_list: times.append(f(alist, 31)) times.sort(key=lambda x: x[0]) for (time, result, func_name) in times: print '%s took %0.3fms.' % (func_name, time * 1000.) </code></pre> <p>yields</p> <pre><code>% test.py time_indexing took 73.230ms. time_izip took 122.057ms. </code></pre> <p>And here I use timeit:</p> <pre><code>% python - m timeit - s '' 'alist=range(1000000);[alist[i:i+31] for i in range(0, len(alist), 31)]' 10 loops, best of 3: 64 msec per loop % python - m timeit - s 'from itertools import izip' 'alist=range(1000000);i=iter(alist);[x for x in izip(*[i]*31)]' 10 loops, best of 3: 66.5 msec per loop </code></pre> <p>Using timeit the results are virtually the same, but using the timing decorator it appears <code>time_indexing</code> is faster than <code>time_izip</code>.</p> <p>What accounts for this difference?</p> <p>Should either method be believed?</p> <p>If so, which?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload