Функция Reduce завершается сбоем с тремя параметрами и нормально работает с двумя параметрами в python

#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 сводится к конечному результату. Спасибо