KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to time some code. First I used a timing decorator: #!/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.) yields % test.py time_indexing took 73.230ms. time_izip took 122.057ms. And here I use timeit: % 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 Using timeit the results are virtually the same, but using the timing decorator it appears time_indexing is faster than time_izip . What accounts for this difference? Should either method be believed? If so, which?
Tags (comma-separated)
Save Edits
Cancel