Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Упустили как минимум generator expressions и обычные генераторы (с yield).
Если Вам не требуются все вычисленные значения сразу (а может и вообще не потребуются), то Вам стоит остановить свой выбор на map.
Непонятно, почему вы сравниваете с list expressions, а не с generator expressions.
[x*x for x in values]. Добавьте её туда для более корректного сравнения$ python -m timeit -r 10 -s "a = lambda x: x*x" "list(map(a, range(1000000)))"
$ python -m timeit -r 10 -s "a = lambda x: x*x" "[a(x) for x in range(1000000)]"
[a(x) for x in range(1000000) if x%2 == 0]
list(map(a, filter(lambda x: x%2 == 0, range(1000000))))
(x*x for x in range(10))
Также generator-comprehension можно делать подобным образом.Терминологически несколько неоднозначно его обозвали.
(x*x for x in range(10))
In addition, the list comprehension executes much faster than the solution using map and lambda. This is because calling a lambda function creates a new stack frame while the expression in the list comprehension is evaluated without creating a new stack frame.
map may be microscopically faster in some cases (when you're NOT making a lambda for the purpose, but using the same function in map and a listcomp).
Это питон. Тут надо биться не за производительность*, а за простоту и понятность кода.
Статья в духе "я продолжаю начинать изучать программирование". Автор копнул глубоко — в дизассемблер байткода, и в то же время безумно поверхностно:
List Comprehension vs Map