Мне потребовалось некоторое время, чтобы ознакомиться с higher order functions
filter
и map
. Так что я привык к ним, и мне действительно понравился filter
, поскольку было ясно, что он фильтрует, сохраняя все правдивое, и я чувствовал себя классно, когда знал некоторые functional programming
термины.
Тогда я читаю этот отрывок (Свободная Книга Питона):
Функции карт и фильтров все еще встроены
в Python 3, но с момента введения списков и генераторов
давления, они не так важны. Listcomp или genexp выполняет работу карты и
Фильтр комбинированный, но более читабельный.
И теперь я думаю, зачем беспокоиться о понятии filter
/ map
, если вы можете достичь этого с помощью уже широко распространенных идиом, таких как списочное понимание. Кроме того, maps
и filters
являются разновидностями функций. В этом случае я предпочитаю использовать Anonymous functions
лямбды.
Наконец, просто для того, чтобы протестировать его, я рассчитал оба метода (map
и listComp
), и я не увидел какой-либо существенной разницы в скорости, которая бы оправдывала споры по этому поводу.
from timeit import Timer
timeMap = Timer(lambda: list(map(lambda x: x*x, range(10**7))))
print(timeMap.timeit(number=100))
timeListComp = Timer(lambda:[(lambda x: x*x) for x in range(10**7)])
print(timeListComp.timeit(number=100))
#Map: 166.95695265199174
#List Comprehension 177.97208347299602