더북(TheBook)

4.10.1 이터레이터란 무엇인가?

파이썬의 중심 개념 중에 이터레이터(iterator)가 있다(종종 이터러블(iterable)과 혼동된다). 이터레이터는 한 번에 하나씩 값을 생산하여 결국 나열된 값의 묶음(stream)을 제공하는 객체다.

모든 리스트는 이터레이터이지만, 모든 이터레이터가 리스트인 것은 아니다. reserved와 같은 많은 함수가 리스트가 아닌 이터레이터를 생산한다. 이 이터레이터는 바로 접근하거나 출력할 수 없다. 예시를 살펴보자.

>>> iter1 = reversed([1, 2, 3, 4])
>>> print(iter1)
<list_reverseiterator object at 0x1111d7f28>

하지만 이터레이터를 리스트로 변환하여 출력하고 인덱스로 값에 접근하거나 슬라이스할 수 있다.

>>> print(list(iter1))
[4, 3, 2, 1]

파이썬의 이터레이터는 상태와 함께 동작한다. 가령 iter1은 이터레이터이기 때문에 다음 코드는 예상대로 완벽하게 동작한다.

>>> iter1 = reversed([1, 2, 3, 4])
>>> for i in iter1:
    print(i, end=' ')

4 3 2 1

이터레이터는 상태 정보를 가지고 있다. 시퀀스의 끝에 도달하면 종료된다. iter1을 재설정(reset)하지 않고 다시 사용하려고 해도 어떤 값도 반환하지 않는다.

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