[Python] iterator

jiminnote·2022년 5월 28일
0

[Python]

목록 보기
24/32

📍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발생되면 멈춤

📍키를 출력하는 딕셔너리에 대한 for 문을 while문으로 구현해보기

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'가 끊이지 않고 출력되는 현상을 볼 수 있다.
꼭 변수로 저장하여 사용하자

profile
Hello. I'm jimin:)

0개의 댓글