Implicit lists
Mark McEahern
marklists at mceahern.com
Thu Jan 30 12:08:22 EST 2003
[Mike Meyer]
> I always thought that exceptions were expensive. Which makes me wonder
> why you aren't using "isinstance(something, str)" for that first test.
It's always best to test for performance assumptions. When I run the
following, I get:
$ junk.py
aslist_except: 0.12
aslist_isinstance: 0.22
.
----------------------------------------------------------------------
Ran 1 tests in 3.182s
OK
ymmv,
// m
#!/usr/bin/env python
from __future__ import generators
import unittest
from time import clock
def time_it(f, *args):
time_in = clock()
result = f(*args)
time_out = clock()
return result, time_out - time_in
def aslist_isinstance(item):
if isinstance(item, (list, tuple)):
for x in item:
yield x
else:
yield item
def aslist_except(item):
try:
item + ''
except TypeError:
for x in item:
yield x
else:
yield item
class test(unittest.TestCase):
def test(self):
items = (('s', ['s']),
(range(10), range(10)),
((1, 2, 3), [1, 2, 3]))
functions = (aslist_except, aslist_isinstance)
timing = {}
count = 10000
for c in xrange(count):
for f in functions:
timing.setdefault(f, 0)
for item, expected in items:
result_iterator, elapsed = time_it(f, item)
timing[f] += elapsed
result = [x for x in result_iterator]
self.assertEquals(result, expected)
for k, v in timing.items():
print '%s: %0.2f' % (k.func_name, v)
if __name__ == '__main__':
unittest.main()
-
More information about the Python-list
mailing list