FishHook
Май 10, 2012 09:31:25
Chern
Покажу фокус:
>>> from timeit import Timer
>>> d=dict(enumerate(range(1000000)))
>>> func1="""def foo():
... for i in xrange(0,10000000):
... if i in d: d[i]
... else: pass
... """
>>>
>>> func2="""def foo():
... for i in xrange(0,10000000):
... try: d[i]
... except KeyError: pass
... """
>>> t = Timer(stmt=func1)
>>> t2 = Timer(stmt=func2)
>>> print "if %s usec/pass" % t.timeit(number=1000000)
if 0.0738561153412 usec/pass
>>> print "try %s usec/pass" % t2.timeit(number=1000000)
try 0.0838830471039 usec/pass
У меня результаты другие!
if 0.069727897644 usec/pass
try 0.0694489479065 usec/pass
Chern
Май 10, 2012 09:58:56
FishHook
У меня результаты другие!
Хм. Запустил десяток раз - результаты меняются то в одну, то в другую сторону
fata1ex
Май 10, 2012 15:34:59
Я при оптимизации меняю по возможности try-except на if in, потому что раньше как-то при тестах так оказалось быстрее :) Видимо, все не так просто.