이터러블(iterable)
__inter__메소드를 포함하고 있으면, 인터러블 객체라고 부름a = 1
print(iter(a))
TypeError: 'int' object is not iterable

이터레이터(iterator)
__next__ 메소드 반드시 포함이터레이터 만들기
class Season:
def __init__(self):
self.data = ["봄", "여름", "가을", "겨울"]
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
cur_season = self.data[self.index]
self.index += 1
return cur_season
else:
raise StopIteration
s = Season()
for i in s:
print(i)
text = "Hello, Python"
# 문자열을 이터레이터로 변환
iter_text = iter(text)
# 이터레이터를 사용하여 문자 출력
print(next(iter_text)) # 'H'
print(next(iter_text)) # 'e'
✏️StopIteration 예외
numbers = [1, 2, 3]
iter_numbers = iter(numbers)
try:
while True:
num = next(iter_numbers)
print(num)
except StopIteration:
pass
제너레이터(Generator)
def generator_func():
yield 1
yield 2
yield 3
print(generator_func() # <generator object generator_func at 0x1054b09e0>
print(hasattr(generator_func(), '__iter__')) # True
print(hasattr(generator_func(), '__next__')) # True
def generator_func():
yield 1
yield 2
yield 3
g = generator_func() # yield를 통해 생성된 제너레이터
print(g) # <generator object generator_func at 0x7fc786582580>
print(g.__next__()) # 1
print(g.__next__()) # 2
print(g.__next__()) # 3