반복자 객체

CODEDRAGON Development/Python

반응형



 

 

반복자 객체

·       next() 메소드를 가지고 있는 객체입니다.

·       next() 메소드로 더 이상 자료를 념겨줄 수 없을 때 StopIteration 예외가 발생합니다.

 

next(iterator)

iterator.__next__()

 

 

 

 

 

반복자 객체 생성 방법

·       iter(obj) 내장 함수는 객체 obj 반복자 객체 반환합니다.

·       내장 함수 iter() "iter(Iterable객체)" 와 같이 사용하여 해당 Iterable 객체의 iterator를 리턴합니다. Iterable 객체에서 실제 Iteration을 실행하는 것은 iterator로서, iteratornext ()메서드를 사용하여 다음 요소(element) 가져옵니다.

·       만약 더이상 next 요소가 없으면 StopIteration Exception 발생시킵니다.

 

iter(Iterable객체)

 

 

 

 

 

반복자 객체의 효율성

반복자는 원 객체의 원소들을 복사하여 지니고 있지 않습니다


 

 

 

 

 

클래스에 반복자 구현하기

·       어떤 클래스를 Iterable 하게 만들려면, 그 클래스의 iterator 를 리턴하는 __iter__() 메서드를 작성해야 합니다.

·       __iter__() 메서드가 리턴하는 iterator는 동일한 클래스 객체가 될 수도 있고, 별도로 작성된 iterator 클래스의 객체가 될 수도 있습니다. 반환되는 Iterator가 되는 클래스는 __next__() 메서드를 가지고 있어야 합니다.

·       for 반복에서 Iterable Object를 사용하면, 내부적으로 해당 Iterable__iter__() 메서드를 호출하여 iterator를 가져온 후 그 iterator__next__() 메서드를 호출하여 반복문을 수행하게 됩니다.


 

 

클래스안에서 내장 함수 iter(obj)에 대응되는 __iter__(self) 메소드를 구현하고 있으며

객체 obj 인자로 해서 iter(obj)를 호출하면 자동으로 __iter__(self) 함수를 호출합니다. __iter__(self) 함수는 next() 함수를 지닌 반복자 객체를 반환해야 합니다.

class MyCollection:

    def __init__(self):

        self.size = 10

        self.data = list(range(self.size))

 

    def __iter__(self):

        self.index = 0

        return self

 

    def __next__(self):

        if self.index >= self.size:

            raise StopIteration

 

        n = self.data[self.index]

        self.index += 1

        return n

 

 

 


반응형

'Development > Python' 카테고리의 다른 글

사용자 정의 예외  (0) 2020.02.18
assert 구문  (0) 2020.02.18
추상클래스(abstract class) 형식  (0) 2020.02.17
Python 접근 제한자 (Access Modifier)  (0) 2020.02.17
파이썬에서 객체의 attribute를 탐색하는 단계  (0) 2020.02.17