2016-12-29 10 views
1

내가 람다 함수에서 반복했는데, 내 코드입니다 : 내가 입력을 주었을 때람다에서 루핑을 할 수 있습니까?

zxm=lambda k:[k+x for x in range(k)] 
print(zxm(5)) 

과 내가 가진 출력은 다음과 같습니다

[5,6,7,8,9] 

내 예상 출력 단의 합이다 모든 5 개의 숫자와 내가 원하는 :

35 

우리는 어떻게 람다에 루프 수 있습니까? 또한, 재귀가 발생할 가능성이 있습니까?

답변

7

그건 루프 그 자체가 아니에요, 그것은리스트의 이해입니다. 예를 들어, sum을 사용하여 합계를 얻을 수 있습니다. for 같은 문장이 lambda 내부 금지되어

In [7]: zxm = lambda k: sum(k+x for x in range(k)) 

In [8]: zxm(5) 
Out[8]: 35 

참고; 표현식 만 허용되므로 목록 내포물을 사용할 수 있지만 전통적인 for 루프를 작성할 수는 없습니다.

+1

이 해법은 더 효율적일 수있는 (특히 목록이 클 경우) 목록 이해력 ('[]')보다는 생성자 이해력 ('()')을 사용했습니다. 추가 정보 : http://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension –

1

먼저 파이썬에서 sum 메서드가 있습니다. sum(zxm(5)) 만 가능합니다. 재귀 람다 (recambive lambdas)가 존재합니다 (Y Combinator 참조). 이것은 파이썬에서 가능합니다 (Can a lambda function call itself recursively in Python? 참조). 그러나 이것의 실용성은 특별히 강력하지 않습니다. Lambda는 여기에서했던 것처럼 내부에서 반복 될 수 있습니다. 문제는 그 것이 아니라는 것입니다. zxm은 람다이지만 그것이 정의되는 방식입니다. 합계는 zxm으로 zxm=lambda k: sum([k+x for x in range(k)])으로 정의하여 얻을 수 있습니다.

관련 문제