1. Iterator(오브젝트형)
먼저 파이썬 도큐멘트에 나와있는 설명을 보면:
데이터의 연속(stream)을 표현하는 오브젝트이다. iterator의 __next__() 메서드(혹은 내장 함수인 next())에 대한 반복적인 호출은 시퀀스 속 아이템을 잇따라 불러온다. 더이상 불러올 아이템이 없을 경우에는 StorIteration 예외가 대신 반환된다. iterator는 iterator 오브젝트 그 자체를 반환하는 __iter__() 메서드를 가지기 때문에 모든 iterator는 당연히 iterable하며 다른 iterable이 적용될 수 있는 곳에 사용될 수 있다. 딱 하나 예외는 여러번의 반복을 시도하는 코드이다. 컨테이너 오브젝트(e.g. list)를 iter()에 넘길 때 마다 혹은 for 반복문에서 사용할 때 마다 새로운 iterator를 생성한다. 하지만 컨테이너 대신 iterator 오브젝트를 넘기면 같은 이전 반복문에서 사용된 텅 빈 컨테이너 같은 iterator 오브젝트가 반환된다.
라고 되어있다.
여기서 말하는 iterable은 어떤 속성을 말하는 것인가:
하나 씩(one at a time) 들어있는 것을 반환할 수 있는 오브젝트를 보고 iterable하다고 한다. 예를 들어 list, str, tuple등과 같은 연속형이 이에 해당하는데 dict, file object, __iter__() 혹은 __getitem__() 메서드로 연속함을 정의한 그 어떠한 클래스 등과 같은 비연속형도 이에 해당한다.
Iterable은 for 반복문에서 zip(), map() 등과 사용될 수 있다. Iterable 오브젝트를 내장 함수인 iter()에 인수로 넘기면 Iterator를 반환한다. 때문에 변수 집합을 다루기에는 Iterator가 좋다. 기본적으로 iterable한 것을 사용할 때에는 iter() 함수를 호출해 특별히 Iterator 오브젝트로 취급하지 않아도 된다.
'파이썬3 노트' 카테고리의 다른 글
python library의 upgrade를 pip으로 내놓지 않아 github의 master로 설치해야 할 때 (0) | 2019.03.29 |
---|---|
pycharm과 terminal에서의 python3 환경이 달라 에러가 날 때 (0) | 2019.03.29 |
torchtext: example 속 들여다보기 (0) | 2018.12.31 |
[**kwargs] [assert] (0) | 2018.12.17 |
pathlib 이야기: [Path.open()] [Path.home()] [exists()] [mkdir()] (0) | 2018.12.15 |