Newbie questions
Alex Martelli
aleax at aleax.it
Mon Mar 24 18:06:34 EST 2003
Ladvánszky Károly wrote:
> I've forgotten to mention some details that might be interesting.
> To create 500000 objects, both versions run cca. 17 secs on a 600MHz PC.
With Python 2.3, a suitably designed TestClass, and an old Athlon 1.2 GHz,
we can do quite a bit better in various ways -- here's an example of how
to use timeit from within your programs:
import timeit
mk_tc = """
class TestClass(object):
__slots__ = ['j',]
def __init__(self, j): self.j = j
cnt = 500*1000
"""
with_map = "ls = map(TestClass, xrange(cnt))"
with_lc = "ls = [TestClass(j) for j in xrange(cnt)]"
with_loop = """ls = cnt*[None]
for j in xrange(cnt):
ls[j] = TestClass(j)
"""
for name, statement in zip('map lc loop'.split(),
[with_map, with_lc, with_loop]):
tim = timeit.Timer(statement, setup=mk_tc).timeit(1)
print "%4s %s" % (name, tim)
This tells me:
[alex at lancelot alex]$ python totim.py
map 2.26362597942
lc 2.48765206337
loop 2.71629798412
[alex at lancelot alex]$
I'm a bit surprised that the list comprehension is faster
now, but this IS quite repeatable on this box &c:
[alex at lancelot alex]$ python totim.py
map 2.29507398605
lc 2.48321902752
loop 2.67293393612
[alex at lancelot alex]$
Alex
More information about the Python-list
mailing list