Питон трудный язык ;)
У меня не получилось запустить тесты в таком виде. Я добавил print() и уменьшил на порядок число итераций:
Код:
from random import randint
import timeit
def foo(): return 'foo'
def bar(): return 'bar'
disp=[foo if i & 1 else bar for i in range(256)]
def test(): u = disp[randint(0, 255)]()
print("list...")
print(timeit.timeit(test, number=10000000))
disp={i: (foo if i % 2 else bar) for i in range(256)}
def test(): u = disp[randint(0, 255)]()
print("dict...")
print(timeit.timeit(test, number=10000000))
И хотя это не принципиально, но все же вопрос:
Код:
$ python3 testqmaster.py
list...
11.997851000051014
dict...
11.946656999993138
Это i7 8550U, python 3.6.5, WSL. Что же за камень делает в 10 раз больше за 2.5 сек?