- 리스트, Dictionary와 같은 문자 Sequence등은 for문을 써서 하나씩 데이터를 처리할 수 있다.
- 하나씩 데이터를 처리할 수 있는 Sequence들을 iterable object(객체)라 부른다.
- 이터레이터는 값을 순차적으로 꺼내올 수 있는 "객체" 이다.
예시 코드)
- L리스트의 요소를 하나씩 꺼내어 제곱해주는 반복문이다.
- 이 반복문에 iterator를 적용해보자.
L = [1, 2, 3] for x in L: print(x**2, end=' ')
print(dir(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'
iterator_L = L.__iter__())
print(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__'
- 리스트 L을 iter(L) 이터레이터로 저장해준다.
- next함수를 리스트를 이터레이터로 저장해둔 변수 I에 적용한다. x = next(I)
- 만일 x를 그대로 print를 한다면 다음과 같은 결과가 나오게 된다.
- 총 print를 4번 한 결과인데, 4번째에 StopIteration 오류가 나오게 된다.
리스트에는 3까지만 있는데, 4번째 프린팅을 요청하였기 때문에 이터레이터가 멈춘 것이다.- try / except를 활용하여, StopIteration오류가 나올 경우 break를 걸어 반복문을 빠져나오게 한다.
결과 값)
딕셔너리도 반복 가능 객체로서, iterator를 사용할 수 있다. 다음 for문을 while문으로 구현해보자.
D = {'a':1, 'b':2, 'c':3} for key in D.keys(): print(key)
결과 값)