CODEDRAGON ㆍDevelopment/Python
반복자 객체
· next() 메소드를 가지고 있는 객체입니다.
· next() 메소드로 더 이상 자료를 념겨줄 수 없을 때 StopIteration 예외가 발생합니다.
next(iterator) |
iterator.__next__() |
반복자 객체 생성 방법
· iter(obj) 내장 함수는 객체 obj의 반복자 객체를 반환합니다.
· 내장 함수 iter()는 "iter(Iterable객체)" 와 같이 사용하여 해당 Iterable 객체의 iterator를 리턴합니다. Iterable 객체에서 실제 Iteration을 실행하는 것은 iterator로서, iterator는 next ()메서드를 사용하여 다음 요소(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 |