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로 자동 변환해준다.