Map() – это встроенная функция языка, которая позволяет произвести какое-либо действие над одним или несколькими итерируемыми объектами в одну строку. Как и многие строенные функции в Python, map() – функция, которая упрощает жизнь: можно было бы обойтись и без нее, но с ней код выглядит проще и понятнее. Ниже – о том, как эта функция работает и где применяется.
Синтаксис map():
iterable = map(function, data1[, data2, …])
Функция map() принимает 2 обязательных аргумента: функцию-обработчик (function) и итерируемый набор данных (data1), после чего применяет функцию к каждому элементу из итерируемого набора данных. Дополнительно можно передать в функцию и другие итерируемые наборы данных, но есть правило: количество итерируемых наборов данных должно быть равно количеству параметров в сигнатуре функции-обработчика. Map() возвращает итерируемый объект – iterable.
Посмотрим на практике:
У нас есть функция multi, которая принимает 2 значения, перемножает их и возвращает. У на есть 2 списка – в первом посимвольно находится слово «sravni», во втором находятся числа от 0 до 6. Мы передаем в map() функцию и 2 списка, после чего map() генерирует на их основе итерируемый объект – объект, который будет последовательно выдавать свой результат, если к нему обратятся. Получить конкретно следующий элемент можно через функцию next(), но мы получим сразу все – для этого мы засунем итерируемый объект в цикл for. Что дальше будет происходить:
Что важно – итерируемый объект способен отдать свои значения только один раз, поэтому если вы еще раз отдадите result в for – ничего не произойдет, итерируемый объект пуст.
Map в качестве первого аргумента принимает функцию, и это может быть:
Синтаксис лямбд:
lambda arguments: expression
, где lambda – ключевое слово, arguments – аргументы (любое количество), expression – выражение (действие над аргументами, одна штука). Return в лямбдах не нужен, потому что выражение в них может быть только одно – его результат и возвращается. Перепишем пример выше с участием лямбды:
Вообще – везде, где нам нужно поэлементно совершить некоторые действия над одним или несколькими итерируемыми объектами. Как пример: