iterable의 의미는 member를 하나씩 차례로 반환 가능한 object를 말한다.
iterable의 예로는 sequence type인 list, str, tuple이 대표적이다. (dict, file도 iterable 하다.)
iterable한 객체들은 for문을 활용해 순차적으로 접근 가능
__iter__()
나 __getitem__()
메소드로 정의된 class는 모두 iterable 하다고 할 수 있다.
iterable은 for loop 말고도, zip(), map()과 같이 sequence한 특징을 필요로 하는 작업에 유용하게 사용된다.
ex) list 객체는 __iter__()
메서드를 가지고 있고 __iter__()
메서드를 호출하면 iterator를 반환하게 된다. for문은 내부적으로 __iter__()
를 호출하는 방식으로 iterator를 가져와 해당 객체의 원소들을 순회하게 된다.
iterator는 next()메소드로 데이터를 순차적으로 호출 가능한 object를 말한다.
만약 next()로 다음 데이터를 불러올 수 없을 경우 (가장 마지막 테이터인 경우) StopIteration exception을 발생시킨다.
iterable 이라고 해서 반드시 iterator는 아니다
iterable을 iterator로 변환하고 싶다면, iter()라는 built-in function을 사용하면 된다.
>>> x = [1,2,3]
>>> type(x)
<type 'list'>
>>> y = iter(x)
>>> type(y)
<type 'listiterator'>
iterable obejct를 for문에서 사용할 수 있는 건, python이 내부적으로 list를 iterator로 변화해 주기 때문이다.
참고