Современные альтернативы функциям 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.
Советуем вам следующее видео к просмотру:
- Наследование. Объектно-ориентированное программирование в Python
- PM Казино – отличный выбор для поклонников азартны развлечений
- Главные показатели качественного контента
- Профессиональный ремонт ноутбуков и мобильной техники. Нюансы и тонкости
- Получение и изменение цвета пикселя в изображении. Библиотека PIL Python
- Слот Book of Oz - играть на рабочее зеркало Плей Фортуна казино
- Генераторы списков в Python
Видео не отображается