<aside>
💡 이터러블 안에 든 아이템을 하나씩 돌며(순회) 반환하는 객체입니다.
다음 아이템을 반환하는 __next__ 매직 메소드를 갖습니다.
</aside>
iterable_list = [1, 2, 3]
iterable_tuple = (4, 5, 6)
iterable_string = "abc"
# 이터레이터(iterator)를 만드는 방법
iterator_list = iter(iterable_list)
iterator_tuple = iter(iterable_tuple)
iterator_string = iter(iterable_string)
lst_val_0 = next(iterator_list)
tpl_val_0 = next(iterator_tuple)
str_val_0 = next(iterator_string)
lst_val_1 = next(iterator_list)
tpl_val_1 = next(iterator_tuple)
str_val_1 = next(iterator_string)
pass
next() : 이터레이터에서 현 차례의 값 반환
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list) # 리스트에서 이터레이터 생성
# 반복문과 next() 함수로 이터레이터의 모든 요소 순회
while True:
try:
element = next(my_iter)
print(element)
except StopIteration:
# 모든 요소를 순회하면 StopIteration 예외 발생
break
try ... catch 문은 예외처리 섹션에서 배울 것이터레이터를 리스트로
# 리스트로 바꾸기 1 (리스트 생성자)
my_iter = iter(my_list) # 💡 이터레이터는 1회용이므로 재정의 (빼고 해 볼 것)
list_from_iter_1 = list(my_iter)
# 리스트로 바꾸기 2 (컴프리헨션)
my_iter = iter(my_list)
list_from_iter_2 = [num for num in my_iter]
<aside>
💡 이터레이터는 다음 차례 값을 반환하는 __next__() 메소드를 가지며, iter() 호출시 스스로를 반환합니다.
</aside>
class CounterIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current > self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
raise StopIteration 에 대해서는 예외처리 섹션에서 배웁니다.