iterator

백승찬·2020년 10월 25일
0

python

목록 보기
4/10

iterator

이터레이터란 값을 순차적으로 꺼내올 수 있는 객체

ex )

L = [1, 2, 3]
for x in L:
	print(x ** 2, end=' ')

L이라는 리스트가 있을 떄 반복문으로 값마다 제곱을 하는 코드

L 리스트가 반복 가능한 객체인지 확인하는 방법은 dir로 호출하여 iter 함수가 있는지 확인

L=['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
 '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
 '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
 '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__',
 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
 '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
 '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend',
 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

dir로 출력해보면 iter 함수가 들어있는 지 확인 그리고 직접 iter 함수를 호출하게되면 이터레이터가 객체임을 확인 가능

print(L.__iter__())
<list_iterator object at 0x10a999210>

이터레이터를 변수에 ㅓ장후에 next 함수를 호출하면 반복문이 동자하는 것처럼 하나씩 꺼내올 수 있다

ex)

iterator_L = L.__iter__()
print("dir iterator_L = ", end=""), print(dir(iterator_L))

dir iterator_L = ['__class__', '__delattr__', '__dir__', '__doc__',
 '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
 '__init__', '__init_subclass__', '__iter__', '__le__',
 '__length_hint__', '__lt__', '__ne__', '__new__', '__next__',
 '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
 '__setstate__', '__sizeof__', '__str__', '__subclasshook__']

next 함수를 호출하여 동작을 확인 리스트안에 3개의 값이 들어있으므로 3개 이상을 호출 할 시

print(iterator_L.__next__())
print(iterator_L.__next__())
print(iterator_L.__next__())
print(iterator_L.__next__())

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

iter 함수와 next 함수의 사용 예시)

I = iter(L)
while True:
    try:
        X = next(I)
    except StopIteration:
        break
    print( X**2, end=" ")

iter 함수와 next 함수를 이용한 딕셔너리 객체 이용 예시)

D = {'a':1, 'b':2, 'c':3}
for key in D.keys():
    print(key)

0개의 댓글