iterable
, iterator
객체>>> ds = [1, 2, 3, 4]
>>> ir = iter(ds) # iterator 객체를 얻는 방법
# iterator 객체를 통해 값을 하나씩 꺼내는 방법
>>> next(ir) # 첫번째 값 반환
1
>>> next(ir) # 두번째 값 반환
2
>>> next(ir) # 세번째 값 반환
3
>>> next(ir) # 네번째 값 반환
4
위 코드를 해석해보자면 다음과 같다.
iter()
함수를 호출하면 ds
에 접근할 수 있는 iterator
객체(리모컨)가 만들어진다.
변수 ir
은 이 iterator
객체를 참조하게 된다.
객체를 전달하면서 next
함수를 호출해 리스트에 저장된 값을 하나씩 얻을 수 있다.
조금 더 이해하기 쉽도록 리모콘에 비유해보도록 하겠다.
ds
리스트를 조종할 수 있는 리모콘(iterator 객체)이 만들어지고,
리모콘의 next
버튼을 누르면 리스트의 요소들을 하나씩 순차적으로 꺼내준다고 생각하면 된다.
이때 모든 리스트의 요소를 꺼내고 난 뒤, 다시 next()
함수를 호출하면 StopIteration
이라는 예외가 발생하도록 설계되어 있다.
iterable
, iterator
객체의 구분그렇다면 iterable 객체와 iterator 객체의 차이는 무었일까?
iter 함수가 반환하는 객체를 가리켜 iterator
객체라 하고, iterator
객체를 얻을 수 있는 리스트와 같은 객체를 가리켜 iterable
객체라 한다.
즉, iterable
객체를 대상으로 iter()
함수를 호출해서 iterator
객체를 만드는 것이다!
🔎 참고
중급편 열혈 파이썬 story05