2012-03-15 3 views
1

시간 프로세싱이나 메모리 사용 및 기타 사항에있어 반복이 더 좋거나 람다 함수가 더 좋습니까? 예람다 함수가 더 좋거나 반복적입니까?

:

x = [10, 20, 30] 

for y in x: 
    if y>10 or y<20: 
     print y 

이것이 더 또는 람다 함수? 시간 처리, 메모리 사용 또는 다른 비교와 관련하여 답변을 원합니다.

+0

왜 아래로? 이것은 우스꽝 스럽다. – sam

답변

3

새로운 목록이나 생성기를 만들고 싶지 않으므로 고전적인 루프가 분명 좋습니다.

이러한 개체를 만들면 메모리 효율이 향상되고 각 요소에 대해 함수를 호출하지 않으면 성능이 향상됩니다.

5

반복자와 람다는 완전히 다른 두 가지입니다. lambda는 간단한 인라인 함수이고 iterator는 연속적인 객체를 반환하는 객체입니다. 예제에는 두 가지 주요 문제점이 있습니다. y 대신 x을 테스트하고 x의 모든 값이 y>10 or y<20으로 전달됩니다. 그래서, 그 수정, 당신의 예는 반복자 이 같은 람다를 사용하여 작성 될 수있다 :

for value in filter(lamdba y: y < 10 or y > 20, x): 
    print(value) 

가이 작업을 수행 할 수있는 몇 가지 방법이 있지만, 성능면에서 당신이있어 어떤 데이터에 따라 달라집니다 처리 방법, 처리 방법 및 처리량에 대한 정보를 제공합니다. 유용한 안내서는 http://wiki.python.org/moin/PythonSpeed/PerformanceTips을 참조하십시오.

1

특히 매핑 할 표현식의 복잡성이 증가함에 따라 목록 표기법이 기능 표기법보다 훨씬 쉽게 읽을 수 있습니다. 또한 목록 이해는지도와 람다를 사용하는 솔루션보다 훨씬 빠르게 실행됩니다. 이것은 람다 함수를 호출하면 새로운 스택 프레임을 생성하고리스트 이해력의 표현식은 새로운 스택 프레임을 만들지 않고 평가되기 때문입니다. >> 즉 http://python-history.blogspot.com/2010/06/from-list-comprehensions-to-generator.html

, 당신은 람다 및 루프/이해/발전기 사이에 선택의 여지가 있는지, 후자를 사용합니다. 나는 당신의 예제를 쓰는 가장 무용지물이 같을 것이라고 생각한다.

print [y for y in x if y < 20] 
관련 문제