class MyIterator:
def __init__(self, stop):
self.currentValue = 0
self.stop = stop
def __iter__(self):
return self
def __next__(self):
if self.currentValue >= self.stop:
raise StopIteration
result = self.currentValue
self.currentValue += 1
return result
my_iterator = MyIterator(5)
for i in my_iterator:
print(i)
이터레이터를 사용할 때에는 for 반목문을 사용!
이 값은 다시 순회 불가능
다시 순회하기 위해서는 __init__ 메서드에서 self.currentValue 변수를 0으로 초기화 하지 않고, __next__ 메서드에서 변수 초기화를 하도록 수정
```python
class MyIterator:
def __init__(self, stop):
self.stop = stop
def __iter__(self):
self.currentValue = 0
return self
def __next__(self):
if self.currentValue >= self.stop:
raise StopIteration
result = self.currentValue
self.currentValue += 1
return result
my_iterator = MyIterator(5)
for i in my_iterator:
print(i)
for i in my_iterator:
print(i)
# 결국 for는 iter먼저 실행하고, next로 StopIteration
# i = iter(li)
# next(i)
```
Generator
Iterator를 생성해주는 함수
리턴 대신 yield 키워드 사용
함수가 실행 중에 중간 결과값을 반환
여기서는 반복문 중간에 yield 하는데 그럼 중간 결과값을 반환하고 계속 반복문 순회를 이어감