Python

[Python] iterable과 iterator

DannyJae 2021. 10. 15. 02:27

 

iterable 이란?

- iterable 은 member를 하나씩 차례로 반환 가능한 object를 말한다.

- 대표적인 예로 sequence type인 list, str, tuple 이있고 non-sequencce type인 dict, file 그리고 __iter__() 또는 __getitem__()이 define된 모든 object를 포함한다

 

# sequence type
for x in range(5):
  print(x) #출력: 1,2,3,4
    
for x in [2,5,6,7]:
  print(x) #출력: 2,5,6,7

# non-sequence type
sample = {'a':1,'b':2,'c':3,'d':4}
for x in sample:
  print(x) #출력: a,b,c,d

위처럼 for문을 통해 원하는 값을 출력할 수 있는 이유는 list, dict 가 iterable하기 때문이다.

 


iterator 란?

- iterator는 next() 메소드로 데이터를 순차적으로 호출 가능한 object이다.

- next()로 다음데이터를 불러올 수 없는 경우 StopIteration exception을 발생시킨다.

- 모든 iterable은 iterator가 아니다

 

x = [1,2,3]
next(x)

# 오류
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator

위같은 경우 list는 iterator가 아니기때문에 next() 메소드로 호출해도 오류를 반환한다.

 

iterable을 iterator로 변환하고싶다면 iter()라는 built-in function을 사용하면 된다.

x = [1,2,3]
y = iter(x)

next(y) #출력: 1
next(y) #출력: 2
next(y) #출력: 3
next(y) 

#오류: 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

list 나 tuple같은 iterable object 를 사용할때는 iter() 메소드를 사용하지않아도 for문을 사용하면 looping하는 동안 python내부에서 임시로 list를 iterator로 자동 변환해준다.