이터레이터는 값을 차례대로 꺼낼 수 있는 객체입니다.
파이썬에서는 이터레이터만 생성하고 값이 필요한 시점이 되었을 때 값을 만드는 방식을
사용합니다.
데이터 생성을 뒤로 미루는 것인데 이런 방식을 지연평가라고 합니다.
(지연 평가란? 가능한 한 수식의 계산을 미루어 두었다가, 수식의 결과가 필요한 순간이 되어야만 비로소 실행하는 계산.)
ex)for i range(100)이라는 반복문을 만들었다고 치면 for 반복문을 설명할 때 0부터 99까지
연속된 숫자를 모두 만들어 내는게 아닌 값을 차례대로 꺼내는 이터레이터 하나를 만들고,
이를 반복할 때 마다 이터레이터에서 숫자를 하나씩 꺼내서 반복
[1, 2, 3].__iter__()
<list_iterator object at 0x03616630>
이것의 결과식은 어떻게 나올까요?
it = [1, 2, 3].iter()
it.next()
1
it.next()
2
it.next()
3
it.next()
Traceback (most recent call last):
File "<pyshell#48>", line 1, in
it.next()
StopIteration
리스트의 이터레이터를 변수에 저장한 뒤에 __next__메서드를 호출해보면 요소를
차례대로 하나씩 꺼내진 것을 볼 수 있습니다.
리스트에 들어있는 [1,2,3]이 나오고 마지막 3 다음에 __next__를 호출하게 되면
StopIteration 예외가 발생하고 반복을 끝냅니다.
숫자형 뿐만 아니라 문자열도 가능합니다.
it = 'Hello, world!'.iter()
it.next()
H
it.next()
e
it.next()
l
it.next()
l
it.next()
o
반복 가능한 객체는 요소를 한 번에 하나씩 가져올 수 있는 객체이고, 이터레이터는 __next__ 메서드를 사용해서 차례대로 값을 꺼낼 수 있는 객체입니다. 반복 가능한 객체(iterable)와 이터레이터(iterator)는 별개의 객체이므로 둘은 구분해야 합니다.
