나의 지식 보관소
이터레이터 Iterator 본문
이터레이터 ( 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)
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
제너레이터 Generator / 제네레이터 표현식 Generator Expression (0) | 2020.09.06 |
---|---|
리스트 컴프리헨션 (List Comprehension) (0) | 2020.09.05 |
예외 처리 (0) | 2020.07.01 |
__all__ (0) | 2020.07.01 |
클래스 상속/메서드 오버라이딩/클래스 변수 (0) | 2020.06.28 |