2017-12-06 11 views
-1

나는 lambda 함수로 functools.reduce() 함수를 사용하여 연습하고 있습니다. 내가 가지고있는 문제는 계속 오류가 발생한다는 것입니다. 여기 내 코드입니다 : 나는 주위에 괄호를 이동했지만 아무것도 작동하는 것 같다되지<lambda>()은 1 점을받습니다.

TypeError: <lambda>() takes 1 positional argument but 2 were given 

: 여기

>>> from functools import reduce 
>>> import math 
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> reduce((lambda x: math.sqrt(x)), l) 

그리고 출력됩니다.

>>> from functools import reduce 
>>> reduce((lambda x, y: x * y), [1, 2, 3, 4]) 
24 
>>> reduce((lambda x, y: x/y), [1, 2, 3, 4]) 
0.041666666666666664 

을하지만 두 번째 예는 두 번째 매개 변수 y를을 가지고 이외의 차이를 볼 수 없습니다 어떤 이유로,이 코드는 잘 작동합니다. 아무도 내가 왜이 오류가 발생하는 조언을 제공 할 수 있습니까?

+1

표시된 두 코드 샘플은 완전히 다른 두 가지 작업을 수행하고 있습니다. 하나는 입력의 제곱근을 얻고 있지만 (잘못 사용함) 다른 하나는 입력을 제곱합니다 (reduce를 올바르게 사용) – smac89

+2

reduce 내장 함수는 인수로 두 개의 인수로 된 다른 함수를 기대합니다. 당신의 람다는 단 하나의 주장 만 가지고 있습니다. https://docs.python.org/2/library/functions.html#reduce – Apollo2020

+0

@ apollo2020은 다음과 같이 말합니다. ** reduce **하려면 ** 2 ** 인수를 취하여 ** 단일 ** 값으로 변환하는 함수가 필요합니다. 당신의 산출물이 정확히 무엇을 기대합니까? – schwobaseggl

답변

2

정확한 구문은 다음과 적산 결과와 전류 값 :

reduce(lambda acc, x: math.sqrt(x), l) 

reduce에 전달 lambda 두 인자를 필요로한다.

+0

설명해 주셔서 감사합니다. 설명서를 읽었으며 이제 문제를 확인합니다. –