Функция карты Python()
Функция Python map() используется для применения функции ко всем элементам указанного итерируемого и возвращаемого объекта карты. Объект карты Python представляет собой кортеж и т. д., использующий свои фабричные функции.
Функция карты Python()
Синтаксис функции Python map():
map(function, iterable, ...)
Мы можем передать несколько итерируемых аргументов функции map(), в этом случае указанная функция должна иметь такое количество аргументов. Функция будет применяться к этим итерируемым элементам параллельно. С несколькими итерируемыми аргументами итератор карты останавливается, когда исчерпан самый короткий итерируемый.
Пример карты Python()
Давайте напишем функцию, которая будет использоваться с функцией map().
def to_upper_case(s):
return str(s).upper()
Это простая функция, которая возвращает строковое представление входного объекта в верхнем регистре. Я также определяю служебную функцию для печати элементов итератора. Функция будет печатать элементы итератора с пробелами и будет повторно использоваться во всех фрагментах кода.
def print_iterator(it):
for x in it:
print(x, end=' ')
print('') # for new line
Давайте посмотрим на пример функции map() с различными типами итерируемых объектов.
Карта Python() со строкой
# map() with string
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)
Выход:
<class 'map'>
A B C
Карта Python() с кортежем
# map() with tuple
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)
Выход:
1 A ABC
Карта Python() со списком
map_iterator = map(to_upper_case, ['x', 'a', 'abc'])
print_iterator(map_iterator)
Выход:
X A ABC
Преобразование карты в список, кортеж, набор
Поскольку объект карты является итератором, мы можем передать его в качестве аргумента фабричным методам для создания списка, кортежа, набора и т. д.
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_list = list(map_iterator)
print(my_list)
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_set = set(map_iterator)
print(my_set)
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_tuple = tuple(map_iterator)
print(my_tuple)
Выход:
['A', 'B', 'C']
{'C', 'B', 'A'}
('A', 'B', 'C')
Карта Python() с лямбдой
Мы можем использовать лямбда-функции с map(), если не хотим использовать их повторно. Это полезно, когда наша функция маленькая и мы не хотим определять новую функцию.
list_numbers = [1, 2, 3, 4]
map_iterator = map(lambda x: x * 2, list_numbers)
print_iterator(map_iterator)
Выход:
2 4 6 8
Python map() несколько аргументов
Давайте рассмотрим пример использования функции map() с несколькими итерируемыми аргументами.
# map() with multiple iterable arguments
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)
Вывод: 5 12 21 32
Обратите внимание, что наша функция имеет два аргумента. Итератор выходной карты является результатом параллельного применения этой функции к двум итерируемым элементам. Давайте посмотрим, что происходит, когда итерации имеют разные размеры.
# map() with multiple iterable arguments of different sizes
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8, 9, 10)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)
map_iterator = map(lambda x, y: x * y, tuple_numbers, list_numbers)
print_iterator(map_iterator)
Выход:
5 12 21 32
5 12 21 32
Поэтому, когда аргументы имеют разный размер, функция карты применяется к элементам до тех пор, пока один из них не будет исчерпан.
Python map() с функцией None
Давайте посмотрим, что происходит, когда мы передаем функцию как None.
map_iterator = map(None, 'abc')
print(map_iterator)
for x in map_iterator:
print(x)
Выход:
Traceback (most recent call last):
File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_map_example.py", line 3, in <module>
for x in map_iterator:
TypeError: 'NoneType' object is not callable
Вы можете проверить полный скрипт Python и другие примеры Python в нашем репозитории GitHub.
Ссылка: Официальная документация