В процессе разработки вы в любом случае столкнетесь с ситуацией, когда с каждым элементом итерируемого объекта нужно будет совершить одно и то же действие.
Предположим что в ходе работы разработчик получает список чисел —
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
Python documentation
Functional Programming HOWTO
Author, A. M. Kuchling,, Release, 0.32,. In this document, we’ll take a tour of Python’s features suitable for implementing programs in a functional style. After an introduction to the concepts of ...