더북(TheBook)

그러나 컴프리헨션은 데이터가 10만 개나 100만 개 있을 때 이 데이터를 모두 생성하기 때문에 크게 신경 쓸 필요가 없다고 했던 공간 복잡도를 고려하게 하는 원인이 되기도 합니다. 편리한 기능은 대부분 이렇게 공간 복잡도가 커지는 경우가 많습니다. 따라서 이에 대한 대응책으로 제너레이터(generator)를 사용합니다.

제너레이터는 연속 가능한(iterator) 자료형을 반환하는 함수로, 실행 중 yield를 만나면 값을 반환하고 더 이상 진행할 수 없는 상태가 아니라면 next()가 호출되기 전까지 대기합니다. 즉, 한 번에 모두 실행하고 그에 대한 결괏값을 반환하는 것이 아니라, 함수가 실행되었다가 다음 next()를 대기하면서 실행이 멈춥니다. 제너레이터를 만드는 방법은 두 가지로, 함수를 정의할 때 return 대신 yield 문구를 집어넣거나, 컴프리헨션 문구를 소괄호로 감싸주는 방식으로 표현식을 생성합니다. 예제에서는 직접 제너레이터를 생성하지 않고 후자의 방법으로 생성하여 설명하겠습니다.

1부터 10까지의 데이터를 선언하는 앞의 코드를 제너레이터로 바꾸려면 컴프리헨션을 괄호로 감싸면 됩니다.

(i for i in range(11))

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.