Функция map Python

Функция map

Функция map() используется в Python для того, чтобы применить одни и те же действия к каждому элементу последовательности. Она имеет следующий синтаксис:

map(function, iterable)

Здесь function - функция, которую нужно применить к последовательности (ее называют трансформационной), а iterable - любой объект, поддерживающий итерацию. Функция map() возвращает map object, который является итерируемым.

Сравнение с генераторами и списковыми включениями

Может показаться, что для тех же целей можно использовать генераторы и списковые включения. Так и есть, поэтому было бы логично сравнить их между собой. Давайте напишем функцию, которая возвращает округленное до первого знака абсолютное значение переданного в нее аргумента и применим её к одной и той же последовательности.

def abs_round(val):
    return round(abs(val), 1)

lst = [-0.111, 2.4321, -3.99999, 2.5]
>>> [abs_round(i) for i in lst] # Списковое включение
... (abs_round(i) for i in lst) # Генератор
... map(abs_round, lst) # map()
[0.1, 2.4, 4.0, 2.5]
<generator object <genexpr> at 0x0000029ACF341BA0>
<map object at 0x0000019C22EBCFA0>

Как видите, функция map() вернула нам объект. Впрочем, map object легко преобразуется в другие типы.

>>> list(map(abs_round, lst))
... set(map(abs_round, lst))
[0.1, 2.4, 4.0, 2.5]
{0.1, 2.4, 2.5, 4.0}

Однако зачем такие сложности? Дело, как это часто бывает, в производительности. Функция map написана на С и работает быстрее:

>>> lst = [i + 0.1 * i for i in range(500)]
... print("Списковые включения:", timeit("[abs_round(i) for i in lst]", number=10000, globals=globals()))
... print("Генератор:", timeit("(abs_round(i) for i in lst)", number=10000, globals=globals()))
... print("map():", timeit("map(abs_round, lst)", number=10000, globals=globals()))
Списковые включения: 2.451521
Генератор: 0.00202250000000026
map(): 0.0009697000000001843

С другой стороны, функция map() гораздо хуже читается, и при злоупотреблении (особенно с анонимніми функциями) код становится слишком сложным для восприятия. Поэтому использование генераторов и списковых включений считается более питоническим.

Заключение

Функция map() широко используется для трансформации последовательностей. Она работает несколько быстрее генераторов, однако сложнее воспринимается при анализе кода.

Практический Python для начинающих
Практический Python для начинающих

Станьте junior Python программистом за 7 месяцев

 7 месяцев

Возможно будет интересно

🏆 Hello, world! Python
Новичок
🏆 Hello, world!

Мы вчера запустили новый www.pylot.me. Должны были в следующую среду, но запустили вчера.

2022-10-04
Как практиковаться в Python? Python
Новичок
Как практиковаться в Python?

Для улучшения качества знаний и повышения уровня программиста, необходим постоянный практикум. Где можно это организовать самостоятельно, и как практиковаться в Python?

2022-10-19
Условные конструкции и сопоставление структурных шаблонов Шпаргалки
Новичок
Условные конструкции и сопоставление структурных шаблонов

Шпаргалка по условным конструкциям и сопоставлению структурных шаблонов

2022-11-09