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
└ 이터레이터와 이터러블의 차이는 여기에 설명이 자세히 나와 있음.
'Python' 카테고리의 다른 글
[python] range&enumerate (0) | 2022.12.22 |
---|---|
파이썬 string 앞에 0채우기 (0) | 2022.12.20 |
리눅스(CentOS) GPU 사용 시 메모리 오류 (0) | 2022.11.18 |
[파이써닉한 코딩] 헷갈리는 이중중첩문 (0) | 2022.10.26 |
백준 1152번 - 단어의 개수 (0) | 2022.09.29 |