Мне нужна помощь, чтобы понять, как карта работает в Python - PullRequest
0 голосов
/ 25 апреля 2018
def multiply(x):
    return (x*x)
def add(x):
    return (x+x)

funcs = [multiply, add]
for i in range(5):
    value = list(map(lambda x: x(i), funcs))
    print(value)

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

Выход:

[0, 0]

[1, 2]

[4, 4]

[9, 6]

[16, 8]

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Ваша карта здесь используется в массиве функций. Таким образом, для каждой функции она будет выполнять лямбда-выражения

.

В лямбде у вас есть x: x(i) Здесь x - текущая функция (поэтому multiply или add).
И i - это ваша текущая итерация цикла (поэтому 0-4).

Например, в первый раз, когда он входит в цикл, i == 0. Функция map запускает multiply 1st, поэтому возвращает 0*0, затем запускает add и возвращает 0+0. Таким образом, выходное значение равно [0,0]

0 голосов
/ 25 апреля 2018

Давайте попробуем вытащить это из цикла и посмотрим, что произойдет.

Ваш lambda x: x(i) вызывает каждую функцию с аргументом i, и map (примерно) превращает это в список.

list(map(lambda x: x(0), funcs)) -> [0,0]

Это то же самое, что сказать: [multiply(0), add(0)].

Если мы попробуем снова с 1:

list(map(lambda x: x(0), funcs)) -> [1,2]

Это то же самое, что сказать: [multiply(1), add(1)].

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

Аналогичный способ переписать эту программу:

def multiply_and_add(i):
    return [multiply(i), add(i)]

result = map(multiply_and_add, range(5))

for value in result
    print(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...