Don Python [DATA SCIENCE]
71 subscribers
6 photos
1 file
19 links
Путь python разработчика после 30. Знания, обсуждения, книги, rock & roll
Download Telegram
⬆️ [INFO] Функция map()

В процессе разработки вы в любом случае столкнетесь с ситуацией, когда с каждым элементом итерируемого объекта нужно будет совершить одно и то же действие.

Предположим что в ходе работы разработчик получает список чисел — numbers = [5, 5, 10, 25, 35, 70]
Что бы работать дальше с этим списком, необходимо преобразовать его в строку. Если попробовать преобразовать напрямую, то код 'упадет' с ошибкой:

numbers = [5, 5, 10, 25, 35, 70]
str_numbers = ' '.join(numbers)

# >>> TypeError: sequence item 0: expected str instance, int found


Очевидный способ решения — это пробежаться циклом for по всем элементам списка:

numbers = [5, 5, 10, 25, 35, 70]
str_streams = [str(number) for number in numbers]
string = ' '.join(str_streams)

print(string)

# >>> 5 5 10 25 35 70


Можно остановиться и на таком варианте, так как это более чем хорошее решение. Но есть более элегантный способ, мимо которого не хочется проходить.

Так как здесь затрагивается часть идеи функционального программирования, советую почитать об этом стиле на странице официального источника


Посмотрим на преобразованный код:

numbers = [5, 5, 10, 25, 35, 70]
string = ' '.join(map(str, numbers))

print(string)

# >>> 5 5 10 25 35 70


Выглядит не плохо, мы избавились от одной строки, но код стал даже более очевидным. Что в нашем случае делает map()? Буквально принимает два аргумента: функцию и итерируемый объект.

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


Для этого короткого примера не потребуется развернутого объяснения. По сути, если словами выразить команду map(str, numbers), то получится: преобразуй в строку каждое число в списке numbers с помощью функции str.

[WARN] Функция передаваемая в параметрах должна передаваться без вызова, то есть без скобок. Если мы передадим и сразу вызовем функцию, то произойдет ошибка:

numbers = [5, 5, 10, 25, 35, 70]
string = ' '.join(map(str(), numbers))

print(string)

# >>> TypeError: 'str' object is not callable


Функция map позволяет делать больше, чем можно описать в посте. Предлагаю особо любопытствующим почитать long read на тему.

———

Good coding 🧑‍💻

#python #function #5min_py #map
Please open Telegram to view this post
VIEW IN TELEGRAM
1