Python 공부하기 8 - iterators

김우식·2022년 5월 31일
0

iterators란?

이터레이터는 값을 순차적으로 꺼내올 수 있는 객체 입니다.
L이라는 다음 리스트가 있을때 for loop문으로 값마다 제곱을 하는 코드는 다음과 같습니다.

L = [1, 2, 3] :iterable

for x in L:
	print(x ** 2, end=' ')

iterators를 변수에 저장후에 next 함수를 호출하면 for문이 동작하는 것처럼 값을 하나씩 꺼내올 수 있습니다. 우선 dir 로 변수에 저장한 이터레이터를 확인해보겠습니다. print문으로 확인해보면 next 함수가 들어있는 것을 확인할 수 있습니다. 그럼 next 함수는 어떤일을 할 수 있을까요 ? 맞습니다. 다음 요소를 하나씩 꺼내오는 함수 입니다.

L = [1,2,3]

iterator_L = L.__iter__()

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 "/Users/wsvgc95/Desktop/Python WorkSpace/2022_05_30/iterator_next.py", line 9, in <module>
    print(iterator_L.__next__())
StopIteration

1,2,3 이 출력되고 StopIteration 이 발생하는 것을 확인할 수 있습니다. 즉, 리스트의 인덱스를 벗어나서 가져올 값이 없으면 StopIteration이 발생하는 것을 알 수 있습니다.

iter, next

그럼 이제 파이썬 기본함수는 중에 앞에서 알아본 iter함수와 next함수를 편하게 사용하게 해주는 iter와 next에 대하여 알아 보겠습니다. iter는 객체의 iter 함수를 호출해주고 next는 객체의 next 함수를 호출하는 함수 입니다. 위의 L 리스트에 iter와 next를 적용해서 for loop 으로 제곱한 것을 while문으로 구현해보겠습니다.

L = [1,2,3,4]

I = iter(L) # == I = L.__iter__()

while True:
    try:
        X = next(I) # I.__next__()
    except StopIteration:
        break
    print( X**2, end=" ")
결과
1 4 9 16

딕셔너리도 반복가능한 객체라서 앞서본 리스트와 같이 iter함수와 next함수를 사용할 수 있고 파이썬 기본함수인 iter, next 또한 사용할 수 있습니다. 다음의 간단한 키를 출력하는 딕셔너리에 대한 for 문을 while문으로 구현해 보세요.

L = {'a':1, 'b':2, 'c':3}

I = iter(L)

while True:
    try:
        X = next(I)
    except StopIteration:
        break
    print(X)
profile
반가워요!

0개의 댓글