더북(TheBook)

이 함수는 한 번에 1부터 10까지 진행하지 않고, 직접 next()를 호출해야 1, 2, 3의 값이 반환됩니다. 이때 이전 값은 갖지 않으며, 필요하다면 따로 list() 같은 함수를 통해 실행되는 값을 저장해야 합니다.

제너레이터의 장점은 함수가 실행할 것이 매우 많아도 메모리는 항상 고정된 값을 지닌다는 점을 꼽을 수 있습니다. 만약 100만 개의 데이터를 제곱해서 더해야 한다면, 리스트 컴프리헨션과 제너레이터의 성능은 얼마나 차이가 날까요?

from sys import getsizeof
import time

#리스트 컴프리헨션
comprehension = [num ** 2 for num in range(1000000)]
startTime = time.time()
sum_comprehension = sum(comprehension)
print("comprehension time: %f" % (time.time() - startTime))
print("comprehension memory size: %dByte. which means %dMB" % (getsizeof(comprehension), getsizeof(comprehension) / 1024 / 1024)

#제너레이터
generator = (num ** 2 for num in range(1000000))
startTime = time.time()
sum_generator = sum(generator)
print("generator time: %f" % (time.time() - startTime))
print("generator memory size: %dByte" % getsizeof(generator))
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.