2013-07-18 2 views
0

나는이 다음 코드 : 나는 3 개 값으로 목록을 확장 할 수있는 람다 함수를 얻는 방법파이썬 람다 매개 변수

g = lambda a, b, c: sum(a, b, c) 
print g([4,6,7]) 

?

답변

4

3 개 값이 수행 할 수있는 목록 t0의 확장 :

g(*[4,6,7]) 

을하지만, sum은 귀하의 방식으로 작동하지 않습니다. 또는 당신은 이런 식으로 쓸 수 있습니다 :

>>> g = lambda *arg: sum(arg) 
>>> print g(4, 5, 6) 
15 
>>> 

또는 당신의 람다리스트 동의합니다

g = lambda alist: sum(alist) 
print g([4,6,7]) 
+0

고마워요 @zhangyangyu – smac89

3
g = lambda L: sum(L) 
print g([4,6,7]) 

은 임의의 크기의 목록에서 작동합니다. 당신이 g = lambda a, b, c: someFunc(a, b, c)를 사용하려면

, 다음 print g(4,6,7)

+0

당신의 대답은 'sum'이 인수를 받아 들일 수 없다 잘못 파이썬에서 제거되었습니다. – zhangyangyu

+0

@zhangyangyu : 공정한 포인트. 내 의미를 명확히하기 위해 편집했습니다 – inspectorG4dget

3

왜 당신이 목록을 취할 lambda을 변경할 수 없습니다 호출합니다. sum() 때문에 세 가지 인수를하지 않습니다

>>> g = lambda a_list: sum(a_list) 
>>> print g([4,6,7]) 
17 

또는 비 키워드 인수 :

>>> g = lambda *nkwargs: sum(nkwargs) 
>>> print g(4,6,7) 
17 
1

당신은 세 개의 매개 변수를받는 함수를 정의하고, 하나의 매개 변수를 공급하고를 , 목록. 당신이

print g([4,6,7]) 

작업 할 경우, 정의는 당신이 찾고있는 코드는

g = lambda lst: sum(lst) 
1

을해야한다 :

당신이 늘 일을하려고했던 어떤
>>> g = lambda a, b, c: sum([a, b, c]) 
>>> print g(*[4,6,7]) 
17 

:

>>> g = lambda a, b, c: sum(a, b, c) 
>>> print g(*[4,6,7]) 

Traceback (most recent call last): 
    File "<pyshell#83>", line 1, in <module> 
    print g(*[4,6,7]) 
    File "<pyshell#82>", line 1, in <lambda> 
    g = lambda a, b, c: sum(a, b, c) 
TypeError: sum expected at most 2 arguments, got 3 

sum()은 제공 한 인수를 처리 할 수 ​​없으므로 당신의 람다 함수 이후


는 단순히 sum() 기능, 왜 그냥 직접 sum() 전화입니까?

코드의 경우 다음 a, b, c 값 :

>>> a, b, c = range(1,4) 
>>> print a,b,c 
1 2 3 

그리고 당신이 원하는 할 수있는 :

>>> g = lambda a, b, c: sum([a, b, c]) 
>>> print g(*[a,b,c]) 
6 

왜 그냥 다음을 수행하지?: 당신의 람다가 전달 고정 된 길이의리스트/튜플을 기대하지만, 별도의 매개 변수에 그리스트/튜플의 값을 확장하고자하는 경우

>>> sum([a,b,c]) 
6 
+0

이것은 예입니다. 다른 것을하려고하지만 람다 매개 변수에 대해 알고 싶습니다. – smac89

1
>>> g=lambda *l: sum(l) 
>>> print g(1,2,3) 
6 
1

는 다음과 같은 작동합니다.

g = lambda (a, b, c): a + b + c 
g([4, 6, 7]) 

매개 변수 목록 주변의 괄호에 유의하십시오.

이 "기능"파이썬 2.x에서 작동하지만, 3