>1 | >>> multiply = lambda x,y: x * y
>2 | >>> multiply(21, 2)
>3 | 42
Но, конечно же, все преимущества lambda-выражений мы получаем, используя lambda в связке с другими функциями
Функция map() в Python:
В Python функция map принимает два аргумента: функцию и аргумент составного типа данных, например, список. map применяет к каждому элементу списка переданную функцию. Например, вы прочитали из файла список чисел, изначально все эти числа имеют строковый тип данных, чтобы работать с ними - нужно превратить их в целое число:
>1 | old_list = ['1', '2', '3', '4', '5', '6', '7']
>2 |
>3 | new_list = []
>4 | for item in old_list:
>5 | new_list.append(int(item))
>6 |
>7 | print (new_list)
>8 |
>9 | [1, 2, 3, 4, 5, 6, 7]
Тот же эффект мы можем получить, применив функцию map:
>1 | old_list = ['1', '2', '3', '4', '5', '6', '7']
>2 | new_list = list(map(int, old_list))
>3 | print (new_list)
>4 |
>5 | [1, 2, 3, 4, 5, 6, 7]
Как видите такой способ занимает меньше строк, более читабелен и выполняется быстрее. map также работает и с функциями созданными пользователем:
>1 | def miles_to_kilometers(num_miles):
>2 | """ Converts miles to the kilometers """
>3 | return num_miles * 1.6
>4 |
>5 | mile_distances = [1.0, 6.5, 17.4, 2.4, 9]
>6 | kilometer_distances = list(map(miles_to_kilometers, mile_distances))
>7 | print (kilometer_distances)
> [1.6, 10.4, 27.84, 3.84, 14.4]
А теперь то же самое, только используя lambda выражение:
>1 | mile_distances = [1.0, 6.5, 17.4, 2.4, 9]
>2 | kilometer_distances = list(map(lambda x: x * 1.6, mile_distances))
>3 |
>4 | print (kilometer_distances)
> [1.6, 10.4, 27.84, 3.84, 14.4]
Функция map может быть так же применена для нескольких списков, в таком случае функция-аргумент должна принимать количество аргументов, соответствующее количеству списков:
>1 | l1 = [1,2,3]
>2 | l2 = [4,5,6]
>3 |
>4 | new_list = list(map(lambda x,y: x + y, l1, l2))
>5 | print (new_list)
> [5, 7, 9]
Если же количество элементов в списках совпадать не будет, то выполнение закончится на минимальном списке:
>1 | l1 = [1,2,3]
>2 | l2 = [4,5]
>3 |
>4 | new_list = list(map(lambda x,y: + y, l1, l2))
>5 |
>6 | print (new_list)
> [5,7]
Функция filter() в Python:
Функция filter предлагает элегантный вариант фильтрации элементов последовательности. Принимает в качестве аргументов функцию и последовательность, которую необходимо отфильтровать:
>1 | mixed = ['мак', 'просо', 'мак', 'мак', 'просо', 'мак', 'просо', 'просо', 'просо', 'мак']
>2 | zolushka = list(filter(lambda x: x == 'мак', mixed))
>3 | print (zolushka)
> ['мак', 'мак', 'мак', 'мак', 'мак']
Обратите внимание, что функция, передаваемая в