Современные альтернативы функциям map, filter и reduce в Python
В функциональных языках программирования обычно имеются функции высокого порядка map, filter и reduce(иногда под другими именами).
Функции map и filter по-прежнему встроены в Python 3, но с появлением списковых включений и генераторных выражений потеряли былую значимость. Как списковое включение, так и генераторное выражение могут сделать то же, что комбинация map и filter, только код будет выглядеть понятнее.
В следующем примере увидете списки факториалов, порожденные функциями map и filter, а также альтернатива в виде спискового включения.
def factorial(n):
return 1 if n < 2 else n * factorial(n-1)
>>> list(map(factorial, range(6))) # (1)
[1, 1, 2, 6, 24, 120]
>>> [factorial(n) for n in range(6)] # (2)
[1, 1, 2, 6, 24, 120]
>>> list(map(factorial, filter(lambda n: n % 2, range(6)))) # (3)
[1, 6, 120]
>>> [factorial(n) for n in range(6) if n % 2] # (4)
[1, 6, 120]
>>>
1.Строим список факториалов от 0! до 5!.
2. Та же операция с помощью спискового включения.
3. Список факториалов нечетных чисел до 5!, построенный с использованием map и filter.
4. Списковое включение делает то же самое, заменяя map и filter и делая ненужным лямбда-выражение.
В Python 3 функции map и filter возвращают генераторы - вариант итератора - поэтому безо всяких проблем могут быть заменены генераторным выражением(в Python 2 эти функции возвращали списки, поэтому их ближайшим аналогом было списковое включение).
Функция reduce, которая в Python 3 была встроенной, теперь "понижена в звании" и перенесена в модуль functools. В той ситуации, где она чаще всего применялась, а именно для суммирования, удобнее встроенная функция sum, включенная в версию Python 2.3 в 2003 году.
Разработчики программы Adobe After Effects на одну конференцию в прошлом признались что в процессе разработки кода они часто использовали функцию reduce.
Сейчас After Effects считается лучшей программой для создания промо-роликов наподобие web hosting explainer. Если вам интересно можете зайти на популярном сайте hunterae.com и найти там больше информации о After Effects.
Она дает большой выйгрыш в плане удобочитаемости и производительности, например, далее мы будем суммировать целые числа до 99 с помощью reduce и sum:
>>> from functools import reduce # (1)
>>> from operator import add # (2)
>>> reduce(add, range(100)) # (3)
4950
>>> sum(range(100)) # (4)
4950
>>>
1. Начиная с Python 3.0, функция reduce больше не является встроенной.
2. Импортируем модуль add, чтобы не создать функцию для сложения двух чисел.
3. Вычисляем сумму целых чисел, не больших 99.
4. Решение той же задачи с помощью функции sum, импортировать функцию сложения больше не нужно.
Общая идея функций sum и reduce - применить некую операцию к каждому элементу последовательности с аккумулированием результатов и тем самым свести(редуцировать) последовательность значений к одному.
Редуцирующими являются также встроенные функции all и any:
all(Iterable) - возвращает True, если каждый элемент объекта Iterable похож на истинный, например all([]) возвращает True.
any(Iterable) - возвращает True, если хотя бы один элемент объекта Iterable похож на истинный, например any([]) возвращает False.
Советуем вам следующее видео к просмотру:
- 12 советов для работы с датой и временем
- Получение и изменение цвета пикселя в изображении. Библиотека PIL Python
- Права доступа к файлам и каталогам
- Игровой автомат Garage - на официальный сайт Вулкан казино играть
- Игровой автомат Sindbad - играть онлайн в казино Адмирал 777 в слоты от Evoplay
- Любители азарта могут весело и с пользой провести досуг в онлайн – казино 1хСлотс
- Игровой автомат Sparks - играть в топовые NetEnt слоты в Вулкан Делюкс казино
Видео не отображается