медленнее в Python 3.6 по сравнению с Python 3.5.

гда использовалmap если бы была функция / метод, который был написан на C, чтобы получить немного больше производительности. Однако недавно я пересмотрел некоторые из моих тестов и заметил, что относительная производительность (по сравнению с аналогичным пониманием списков) резко изменилась между Python 3.5 и 3.6.

Это не реальный код, а лишь минимальный пример, который иллюстрирует разницу:

import random

lst = [random.randint(0, 10) for _ in range(100000)]
assert list(map((5).__lt__, lst)) == [5 < i for i in lst]
%timeit list(map((5).__lt__, lst))
%timeit [5 < i for i in lst]

Я понимаю, что это не очень хорошая идея, чтобы использовать(5).__lt__ но я не мог придумать полезный пример прямо сейчас.

Время на Python-3.5 было в пользуmap подход:

15.1 ms ± 5.64 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
16.7 ms ± 35.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Хотя тайминги Python-3.6 на самом деле показывают, что понимание происходит быстрее:

17.9 ms ± 755 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
14.3 ms ± 128 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Мой вопрос заключается в том, что произошло в этом случае, что ускорило понимание списка иmap решение медленнее? Я понимаю, что разница не так уж и велика, мне просто стало любопытно, потому что это был один из «приемов», которые я иногда (на самом деле редко) использовал в кодах, критичных к производительности.

Ответы на вопрос(0)

Ваш ответ на вопрос