본문 바로가기

python

python iterable과 iterator에 대해

파이썬을 사용하다 보면 iterable, iterator 한 객체라고 하면서 많이 들어봤을 거다.

이 두 부분에 대해서 아래에 정리해보겠다.

iterable

iterable 한 객체는 즉, 반복 가능한 객체라고 알고 있으면 된다.

그러면 반복 가능한 객체는 무엇인가?

대표적으로 우리가 알고 있는 list, tuple, dict 등등 for 문에서 돌아가는 객체들을 생각하면 된다.

앞서 말한 저 3가지 말고도 다른 게 있는데 set, str, bytes, range 가 있다.

# iterable 한 객체 예시
# list
var_list = [1, 2, 3, 4]
var_dict = {'a': 1, 'b': 2}
var_set = {1, 2}
var_str = 'abc'
var_bytes = b'abcdef'
var_tuple = (1, 2, 3, 4)
var_range = range(0, 5)

# 반면 iterable한 객체가 아닌 예시
var_int = 123
var_float = 10.1
var_none = None

# 위의 예시가 iterable 한 객체인지 확인해보는 방법
isinstance(var_list, collections.Iterable)  # True / False로 출력이 되는데 iterable 한 객체이면 True를 반환 한다.

iterator

iterator 한 객체는 즉, 값을 차례대로 꺼낼 수 있는 객체이다.

iterator 객체를 만드는 방법은 iterable 객체를 파이썬 내장함수인 iter()를 사용해 iterator 객체를 만들 수 있다.

a = [1, 2, 3]
b = {1, 2, 3}
c = (1, 2, 3)
# iterator 객체로 만드는 방법
# 1. iter()를 사용해서 만들기
a_iter = iter(a)  # iterator 객체 생성 완료
# 2. __iter__ 메서드로 만들기 (iterable 객체의 매직 메서드를 사용)
b_iter = b.__iter__()
c_iter = iter(c)
type(a_iter)  # type을 찍어봄으로써 iterator 객체로 생성되었다는 것을 알 수 있다.
type(b_iter)
type(c_iter)

# 각각의 type은 해당 객체_iterator로 나온다.
# ex) list를 iterator 객체로 변환 하면 list_iterator로 type명이 출력된다.

# a_iter 값 하나씩 뽑아보기
next(a_iter)  # 1
next(a_iter)  # 2
next(a_iter)  # 3
next(a_iter)  # 4번째 값은 없으므로 StopIteration이라는 예외가 발생하게 된다.

# __next__()으로 값 뽑아보기
b_iter.__next__()
b_iter.__next__()
b_iter.__next__()

'python' 카테고리의 다른 글

python map()  (0) 2021.07.06
python 내장함수 sort(), sorted()  (0) 2021.06.26
python json 모듈로 json 데이터 다루기  (0) 2021.06.20
python @decorator에 대해서  (0) 2021.06.20
python 추상 클래스(abstract class)  (0) 2021.06.08