파이썬 ) iterator

김건우·2020년 7월 23일
0

파이썬 문법

목록 보기
4/5
post-custom-banner

1. 정의

  • 리스트, Dictionary와 같은 문자 Sequence등은 for문을 써서 하나씩 데이터를 처리할 수 있다.
  • 하나씩 데이터를 처리할 수 있는 Sequence들을 iterable object(객체)라 부른다.
  • 이터레이터값을 순차적으로 꺼내올 수 있는 "객체" 이다.

2. iterator 분석

예시 코드)

  • L리스트의 요소를 하나씩 꺼내어 제곱해주는 반복문이다.
  • 이 반복문에 iterator를 적용해보자.
L = [1, 2, 3]
for x in L:
	print(x**2, end=' ')

1. 먼저 리스트가 반복가능한 객체인지 확인해보자.

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'

  • 3번째 줄 왼쪽에서 5번째 "__iter__" 함수를 확인할 수 있다. (반복가능한 객체 확인)

2. __iter__ 함수의 객체와 __next__ 함수

  • __iter__함수는 이터레이터 객체이다. 어떤 함수들이 존재하는지 확인해보자.
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__'

  • 내가 원하는건 for문과 같이 리스트를 순차적으로 꺼내 와야한다.
  • 3번째 줄의 오른쪽에서 2번째 __next__ 함수를 사용하면 된다.

3. iterator 사용하기

  • 리스트 L을 iter(L) 이터레이터로 저장해준다.
  • next함수를 리스트를 이터레이터로 저장해둔 변수 I에 적용한다. x = next(I)
  • 만일 x를 그대로 print를 한다면 다음과 같은 결과가 나오게 된다.

  • 총 print를 4번 한 결과인데, 4번째에 StopIteration 오류가 나오게 된다.
    리스트에는 3까지만 있는데, 4번째 프린팅을 요청하였기 때문에 이터레이터가 멈춘 것이다.
  • try / except를 활용하여, StopIteration오류가 나올 경우 break를 걸어 반복문을 빠져나오게 한다.

결과 값)

3. iterator 사용하여 문제 해결하기.

딕셔너리도 반복 가능 객체로서, iterator를 사용할 수 있다. 다음 for문을 while문으로 구현해보자.

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


결과 값)

profile
꾸준하게 공부하기
post-custom-banner

0개의 댓글