Python
이터레이터에서 왜 __iter__를 선언할까?
교 향
2022. 11. 25. 17:55
class MyItertor:
def __init__(self, data):
self.data = data
self.position = 0
def __iter__(self):
print(self)
return self
def __next__(self):
if self.position >= len(self.data):
raise StopIteration
result = self.data[self.position]
self.position += 1
return result
if __name__ == "__main__":
i = MyItertor([1,2,3])
print(type(i))
for item in i:
print(item)
위키를 보며 '이터레이터'를 공부하던 중, 두 번째 def __iter__에서
굳이 왜 자기 자신을 반환하는 __iter__를 정의해 줘야 하는 걸까?란 의문이 들었다.
하여 __iter__부분을 지우고 돌려보니 돌아가지 않았는데, 이유는
def __init__과 def __iter__까지가 'iterable'한 객체를 만들겠다는 말이었다.
실제 코드를 돌리면 init과 iter는 한 번 돌고 __next__에서 실제로 여러번 함수가 돌아간다.
__iter__를 선언함으로 나는 'iterable'한 객체를 만들거야! 라며 파이썬에 알려주는 약속인 것이다.
즉, self로 MyItertor를 불러와 iterable하게 반환해주고순환하며
__next__에서 다음 동작으로 넘어가게 하여 'iterator'를 만드는 것임
https://shoark7.github.io/programming/python/iterable-iterator-generator-in-python
└ 이터레이터와 이터러블의 차이는 여기에 설명이 자세히 나와 있음.