📍iterator
값을 순차적으로 꺼내올 수 있는 객체
👉__iter__()
L = [1, 2, 3] #iterable
print(L.__iter__()) #print(iter(L))
#<list_iterator object at 0x10a999210>
👉__next__
이터레이터를 변수에 저장후에 __next__
함수를 호출하면 for문이 동작하는 것처럼 값을 하나씩 꺼내올 수 있다.
L = [1, 2, 3]
iterator_L=iter(L)
print(iterator_L.__next__())
print(iterator_L.__next__())
print(iterator_L.__next__())
print(iterator_L.__next__())
'''
1
2
3
Traceback (most recent call last):
File "main.py", line 7, in <module>
print(iterator_L.__next__())
StopIteration
'''
StopIteration
리스트의 인덱스를 벗어나서 가져올 값이 없으면 StopIteration이 발생
L = [1, 2, 3]
iterator_L=iter(L)
while True:
try:
print(next(iterator_L))
except StopIteration:
break #StopIteration발생되면 멈춤
D = {'a':1, 'b':2, 'c':3}
for key in D.keys():
print(key)
위 코드를 while문으로 바꾸면
D = {'a':1, 'b':2, 'c':3}
iterator_D=iter(D.keys())
while True:
try:
print(next(iterator_D))
except StopIteration:
break
만약 iterator_D=iter(D.keys())
처럼 변수로 선언하지 않을경우
D = {'a':1, 'b':2, 'c':3}
while True:
try:
print(next(iter(D.keys())))
except StopIteration:
break
이렇게 쓸 수 있겠지만 StopIteration가 발생되지않고 첫 키값인 'a'가 끊이지 않고 출력되는 현상을 볼 수 있다.
꼭 변수로 저장하여 사용하자