Iterator

  • __iter__ 는 반복자 개체를 반환

  • 하나의 원소를 꺼내서 사용하려면 __next__사용

  • StopIterator: 모든 원소를 처리하면 반복자 객체의 원소를 다 처리했다는 의미로 이 예외 발생

  • 반복자 class를 정의할 때는 __iter__, __next__ 2개를 반드시 구현

1
2
3
4
5
6
7
8
9
10
11
class Iterator:
    def __init__(self,iterable):
        self.iterable = iterable

    def __iter__(self):
        return self
    
    def __next__(self):
        if not self.iterable:
            raise StopIteration("데이터가 없음")
        return self.iterable.pop(0)
1
it = Iterator([1,2,3,4,5])
1
it.iterable
[1, 2, 3, 4, 5]
1
next(it)
1
1
next(it)
2
1
it.iterable
[3, 4, 5]
  • 다시 사용하려면 새로운 반복자 개체를 만든다

  • 순환문에서 처리 시 모든 원소 다 소진 후에 예외가 발생하지 않는다

1
2
3
it_1 = Iterator([1,2,3,4,5])
for i in it_1:
    print(i)
1
2
3
4
5