Lambda, map и filter в Python
В данной статье мы подробно рассмотрим что такое функциональное программирование, а также про некоторое методы (map, lambda и прочие). Если вы новичок или вам просто интересна это тема, то мы начинаем.
Lambda, map и filter в python
Lambda — грубо говоря, это функция, которую можно использовать один раз (одноразовая). Ее можно задействовать только при создании и используется она, как правильно, в комбинации с другими функциями. Например, map, filter, zip.
mile_distances = [1.0, 6.5, 17.4, 2.4, 9]
kilometer_distances = list(map(lambda x: x * 1.6, mile_distances))print (kilometer_distances)
Map — очень полезная функция и вот почему: она принимает в себя 2 аргумента, один из которых функция, а второй последовательность. Она будет сама пробегать по всей последовательности и применять заданную функцию. Конечно, для таких целей можно использовать циклы, но использовать именно map выгоднее хотя бы потому, что она занимает гораздо меньше строк кода.
old_list = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’]
new_list = list(map(int, old_list))
print (new_list)
Стоит сказать, что map сработает, даже если ей передать 2 последовательности, тогда она просто прекратит работать на той, в которой меньше элементов.
Filter — не сложно догадаться, что данная функция просто сортирует какую-то последовательность. Она так же, как и map, принимает два аргумента: функцию и последовательность.
list = [‘одуванчик’, ‘рис’, ‘одуванчик’, ‘одуванчик’, ‘рис’, ‘одуванчик’, ‘рис’, ‘рис’, ‘рис’, ‘одуванчик’]
sortedList = list(filter(lambda x: x == ‘рис’, list))
print (sortedList )
[‘рис’, ‘рис’, ‘рис’, ‘рис’, ‘рис’]
Отличительной чертой filter является то, что функция должна выдавать значения True (False), чтобы весь процесс сортировки проходил корректно.
Map, filter, reduce
Итак, мы уже познакомились с несколькими функциями map, которая применяет какое-то lambda выражение для всей последовательности, filter, которая фильтрует последовательность, теперь же рассмотрим что такое reduce. Reduce — позволяет применять к последовательности определенную функцию и возвращает два значения. Рассмотрим это на примере.
Перед тем, как мы перейдем на примеры стоит сказать, что в Python 2 reduce шел из коробки, а в Python 3 его убрали, поэтому подключать необходимо вручную.
from functools import reduce
number = [3,6,7,9,10]
result = reduce(lambda a,b: a + b, number)
print (result) => 32
Функциональное программирование в python
Функциональное программирование — это такой подход программирования, в котором приложение рассматривается как вычисление математических функций. Обычно, говоря о таком методе, автоматически подразумеваются функции, которые мы уже сегодня прошли.
Функции map, zip и lambda в примерах
Давай посмотрим как же работают некоторые функции на практике:
map
OldList= [’12’, ’22’, ’33’, ’45’, ’56’, ’67’, ’78’]
NewList= list(map(int, OldList))
print (NewList)
[12, 22, 33, 45, 56, 67, 78]
Как видите, тут map, превратила числа, находящие в массиве как строки, в настоящие числа.
zip
one = [1,2,3]
two = «xyz»
three = (False, None)
result = list(zip(one, two, three))
print (result) => [(1, ‘x’, False), (2, ‘y’, None)]
Zip заканчивает свое выполнение, когда закончится самый маленький список.
lambda
>>> sum = lambda x,y: x + y
>>> sum(25, 17)
42
Почему map и reduce лучше?
У данных функций есть ряд преимуществ, которые мы сейчас затронем:
- они значительно сокращают код;
- map и reduce — функциональны, то есть в отличие от циклов от никак не повлияют на код, который находится перед или после них;
- они делают код более читабельным;
- они имеют много «друзей», которые облегчают работу с ними (find, any, allи filter).
В заключении я хочу напомнить, что потреблять знания и не использовать их на практике — бесполезно. Поэтому прямо сейчас запускайте свою среду разработки и начинайте применять все, что вы сегодня узнали на практике. Удачи в освоение программирование!