Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

이터레이터 Iterator 본문

프로그래밍 언어/파이썬

이터레이터 Iterator

야식은진리다 2020. 9. 4. 01:33

이터레이터 ( Iterator )

이터레이터는 반복자라는 뜻으로 객체 지향 언어에서 배열이나 배열과 유사한 자료 구조의 내부 요소를 순회하는 객체이다. 파이썬에서는 for문을 써서 데이터를 하나씩 처리할 수 있는 시퀀스들을 Iterable Object라고 부르고 list, dict, set, str, bytes, tuple, range 등이 해당된다.

 

for a in [2,9,3,6,7]:
    print(a)
 
for b in "Hello World":
    print(b)

 

파이썬의 내장함수인 iter()는 "iter(Iterable객체)"와 같이 사용하여 해당 Iterable 객체의 Iterator를 리턴한다. Iterator 객체의 next 메서드를 사용하면 다음 요소를 가져올 수 있고 만약 next요소가 없으면 StopIteration Exception을 발생시킨다. next메서드는 python2에서는 iterator.next()를 사용하고, python3에서는 interator.__next__() 메서드를 사용한다. 버전과 관계 없이 사용하려면 next(iterator)를 사용하면 된다.

 

a = iter([1,2,3])

next(a)
a.__next__()
next(a)
a.__next__() # StopIteration Exception 발생

 

만약 어떤 클래스를 iterable하게 하려면 그 클래스의 iterator을 리턴하는 __iter__() 메서드를 구현해야 한다. 또 iterator가 되는 클래스는 next 메서드를 구현해야한다. 실제로 for문에 Iterable Object를 사용하면, 해당 Iterabla 객체의 __iter__() 메서드를 호출하여 iterator를 가져온 후 next메서드를 호출하여 루프를 돈다.

 

class IterableCollection:
    def __init__(self, size):
        self.size = size
        self.data = list(range(size))
 
    def __iter__(self):
        self.index = 0
        return self
 
    def __next__(self):
        if self.index >= self.size:
            raise StopIteration
 
        n = self.data[self.index]
        self.index += 1
        return n
 
 
a = IterableCollection(5)
for i in a:
    print(i)