파이썬3 노트

[Iterator]

Jonchann 2019. 1. 13. 23:11



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 오브젝트로 취급하지 않아도 된다.