Серийное и параллельное картирование

map () является встроенной функцией, что означает, что она доступна везде без необходимости использования оператора 'import'. Он доступен везде, как и print (). Если вы посмотрите на Пример 5, вы увидите, что мне пришлось использовать инструкцию import, прежде чем я смог использовать pretty print (import pprint). Таким образом, pprint не является встроенной функцией

Серийное картирование

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

Пример 1

 insects = ['fly', 'ant', 'beetle', 'cankerworm']
f = lambda x: x + ' is an insect'
print(list(map(f, insects))) # the function defined by f is executed on each item of the iterable insects

 

результаты в

 ['fly is an insect', 'ant is an insect', 'beetle is an insect', 'cankerworm is an insect']

 

Пример 2

 print(list(map(len, insects))) # the len function is executed each item in the insect list

 

результаты в

 [3, 3, 6, 10]

 

Параллельное отображение

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

 carnivores = ['lion', 'tiger', 'leopard', 'arctic fox']
herbivores = ['african buffalo', 'moose', 'okapi', 'parakeet']
omnivores = ['chicken', 'dove', 'mouse', 'pig']

def animals(w, x, y, z):
    return '{0}, {1}, {2}, and {3} ARE ALL ANIMALS'.format(w.title(), x, y, z)

 

Пример 3

 # Too many arguments
# observe here that map is trying to pass one item each from each of the four iterables to len. This leads len to complain that
# it is being fed too many arguments
print(list(map(len, insects, carnivores, herbivores, omnivores)))

 

результаты в

 TypeError: len() takes exactly one argument (4 given)

 

Пример 4

 # Too few arguments
# observe here that map is suppose to execute animal on individual elements of insects one-by-one. But animals complain when
# it only gets one argument, whereas it was expecting four.
print(list(map(animals, insects)))

 

результаты в

 TypeError: animals() missing 3 required positional arguments: 'x', 'y', and 'z'

 

Пример 5

 # here map supplies w, x, y, z with one value from across the list
import pprint
pprint.pprint(list(map(animals, insects, carnivores, herbivores, omnivores)))

 

результаты в

 ['Fly, lion, african buffalo, and chicken ARE ALL ANIMALS',
 'Ant, tiger, moose, and dove ARE ALL ANIMALS',
 'Beetle, leopard, okapi, and mouse ARE ALL ANIMALS',
 'Cankerworm, arctic fox, parakeet, and pig ARE ALL ANIMALS']