Python: iterator(이터레이터)

dev-swd·2020년 10월 25일
0

python

목록 보기
15/23
post-thumbnail
post-custom-banner

이터레이터 개념

이터레이터는 값을 차례대로 꺼낼 수 있는 객체(object)이다.

만약, 연속된 숫자를 미리 만들면 숫자가 적을 때는 상관없지만 많을 때는 메모리를 많이 사용 하게 된다. 따라서 성능에 불리하다. 그래서 파이썬에서는 이터레이터만 생성하고 값이 필요한 시점이 되었을 때 값을 만드는 방식을 사용한다.

이터레이터를 사용할 수 있는 객체는 반복 가능한 객체(iterable)이고, iterable 객체에는 문자열, 리스트, 딕셔너리, 세트 가 있다.

객체가 반복가능한 객체인지 알아보는 방법은 객체에 __iter__ 메서드가 들어있는지 확인하면 된다.

  • dir(객체)

이터레이터 만들기

it = [1, 2, 3].__iter__()
it.__next()__ # 1
it.__next()__ # 2
it.__next()__ # 3
it.__next()__ # StopIteration 에러
  1. 리스트의 이터레이터를 변수에 저장한다.
  2. 이터레이터 변수로 next() 메서드를 호출하여, 요소를 차례대로 꺼낸다.
  3. next() 를 계속 호출하여 요소를 다 꺼낸 후, 다시 호출하면 StopIteration 예외를 발생시켜서 반복을 끝낸다.
r = range(3).__iter__()
r.__next__()
  • 위의 예와 같이 반복 가능한 객체는 __iter__ 메서드로 이터레이터를 얻고, 이터레이터의 __next__ 메서드로 반복한다.
  • 클래스에 __iter__, __next__ 메서드를 모두 구현하면 이터레이터를 만들 수 도 있다.
  • __iter__, __next__를 가진 객체를 이터레이터 프로토콜(iterator protocol)을 지원한다고 말한다.
  • __getitem__ 메서드를 구현하면 인덱스로 접근할 수 있는 이터레이터가 된다.

next() 기본값 지정하기

기본값을 지정하면 반복이 끝나더라도 StopIteration이 발생하지 않고 기본값을 출력한다.


반복 가능한 객체와 이터레이터의 차이점

*반복 가능한 객체(iterable): 요소를 한 번에 하나씩 가져올 수 있는 객체
*이터레이터(iterator): __next__ 메서드를 사용해서 차례대로 값을 꺼낼 수 있는 객체

  • 즉, iterable 에서 __iter__ 메서드로 이터레이터를 얻을 수 있다.
  • 클래스에 iter, next 메서드를 구현하면 이터레이터가 된다.

시퀀스 객체와 반복 가능한 객체의 차이

  • 리스트, 튜플, range, 문자열은 반복 가능한 객체이면서 시퀀스 객체이다.
  • 딕셔너리와 세트는 반복 가능한 객체이지만 시퀀스 객체는 아니다. 그 이유는 시퀀스 객체는 요소의 순서가 정해져 있고 연속적(sequence)으로 이어져 있어야 하는데, 딕셔너리와 세트는 요소(키)의 순서가 정해져 있지 않기 때문이다.

profile
개발을 취미로 할 수 있는 그 때 까지
post-custom-banner

0개의 댓글