#python #python-3.x #lambda
#python #python-3.x #лямбда
Вопрос:
from functools import reduce
o = [20,30,100,60,80,90]
#1
print(reduce((lambda x,y:x y),o)) # returns 380
#2
print(reduce((lambda x,y,z:x y z),o)) # FAILS
#3
print(reduce((lambda x,y,z=10:x y z),o)) # returns 430
Может кто-нибудь объяснить, почему # 1 работает нормально, а # 2 терпит неудачу.
Ответ №1:
Из документации:
Примените функцию с двумя аргументами кумулятивно к элементам итеративного […]
Это означает, что функция должна принимать 2 аргумента, а не 3. Если вы подумаете об этом, третий аргумент не имеет никакого смысла. Первый аргумент — это ранее уменьшенное значение, а второй аргумент — следующее значение.
В вашем третьем примере третий аргумент является необязательным, поэтому он все еще работает, когда ему передаются только 2 аргумента.
Комментарии:
1. Прочитайте документацию, поэтому совокупность двух аргументов для iterable сводится к конечному результату. Спасибо