Давайте попробуем вытащить это из цикла и посмотрим, что произойдет.
Ваш 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)