순회 가능한 객체
- 순회가능한 객체
- 데이터를 하나하나씩 처리할 수 있는 객체들을 순회가능 객체라 칭한다.
- set, list, dict, tuple, generator 등은 모두 순회가능(Iterable) 객체이다.
- 어떤 클래스를 Iterable하게 하려면 __iter__와 __next__ 멤버함수를 구현해야한다.
- 클래스를 Iterable하게 만드는 예시
class MyCustom: def __init__(self, start, end): self.start = start self.end = end def __iter__(self): # for문에 생성한 인스턴스가 들어갈 경우, iterator가 아니기에 iterator를 요구받는다. return self # 요구에 self로 응답하므로써 객체 자기자신을 iterator로 사용하겠다고 최초 한번 선언한다. def __next__(self): # iterator 선언 후, for문을 돌때마다 next가 호출된다. if self.start >= self.end: # if 조건을 만족하지 않으면 for문에서 제공하는 StopIteration 에러를 발생시켜 종료 raise StopIteration value = self.start self.start += 1 return value
>>> mycus = MyCustom(0,5)
>>> iterator = iter(mycus) # 인스턴스 자신을 iterator 선언
>>> next(iterator) # next로 for 문과 동일한 동작 수행
1
>>> next(iterator) # mycus.__next__()
2
>>> for i in mycus:
print(i)
3
4
https://mingrammer.com/translation-iterators-vs-generators/ => Iterator, Iterable, Generator 설명이 잘 되어있는 글
웹 개발자가 알려주는 수익형 블로그 고속 성장 A to Z