내가 람다 함수에서 반복했는데, 내 코드입니다 : 내가 입력을 주었을 때람다에서 루핑을 할 수 있습니까?
zxm=lambda k:[k+x for x in range(k)]
print(zxm(5))
과 내가 가진 출력은 다음과 같습니다
이[5,6,7,8,9]
내 예상 출력 단의 합이다 모든 5 개의 숫자와 내가 원하는 :
35
우리는 어떻게 람다에 루프 수 있습니까? 또한, 재귀가 발생할 가능성이 있습니까?
내가 람다 함수에서 반복했는데, 내 코드입니다 : 내가 입력을 주었을 때람다에서 루핑을 할 수 있습니까?
zxm=lambda k:[k+x for x in range(k)]
print(zxm(5))
과 내가 가진 출력은 다음과 같습니다
이[5,6,7,8,9]
내 예상 출력 단의 합이다 모든 5 개의 숫자와 내가 원하는 :
35
우리는 어떻게 람다에 루프 수 있습니까? 또한, 재귀가 발생할 가능성이 있습니까?
그건 루프 그 자체가 아니에요, 그것은리스트의 이해입니다. 예를 들어, sum
을 사용하여 합계를 얻을 수 있습니다. for
같은 문장이 lambda
내부 금지되어
In [7]: zxm = lambda k: sum(k+x for x in range(k))
In [8]: zxm(5)
Out[8]: 35
참고; 표현식 만 허용되므로 목록 내포물을 사용할 수 있지만 전통적인 for
루프를 작성할 수는 없습니다.
먼저 파이썬에서 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)])
으로 정의하여 얻을 수 있습니다.
이 해법은 더 효율적일 수있는 (특히 목록이 클 경우) 목록 이해력 ('[]')보다는 생성자 이해력 ('()')을 사용했습니다. 추가 정보 : http://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension –