-
이터레이터 iteratorToday_I_Learned/Python 2023. 9. 17. 11:29
요소(element)를 하나씩 차례대로 꺼낼 수 있는 객체.
이터레이터를 사용하는 이유는 꺼내올 요소 전체를 미리 생성하지 않고, 필요한 값만 하나씩 생성하여 메모리 사용을 줄이기 위함이다. = 지연 평가 방식 lazy evaluation
반복 가능한 객체만이 이터레이터로 변환될 수 있다.
반복 가능한(iterable) 객체: 요소가 여러 개이고 한 번에 요소를 하나씩 꺼낼 수 있는 객체. for 문과 같은 반복 구문에 적 용할 수 있는 리스트 같은 객체. (iterable object ≠ iterator)
객체의 반복 가능 여부는
__dir__(객체)
로 조회하여 ‘__iter__’가 존재하는지 확인하면 된다.__iter__가 있다는 것은 그 객체가 반복 가능하다는 것이지 반드시 이터레이터라는 의미는 아니게 되는 건가...?
__iter__()
함수는 반복 가능한 객체를 이터레이터로 바꾸어 반환하는 함수이다.반복 가능한 객체를 이터레이터로 변환하는 또 다른 방법은 파이썬 내장 함수
iter()
를 사용하는 것이다.ex)
tmp_list = [0 ,1, 2] list_it = tmp_list.__iter__() # list_it 는 list_iterator 타입의 이터레이터이다. list_it2 = iter(tmp_list) # list_it2 도 list_iterator 타입의 이터레이터이다.
이터레이터 객체에서 요소를 하나씩 꺼내는 함수는
__next__()
라는 매직 메서드이다. 즉 이터레이터는 __next__ 를 멤버 메서드로 구현해야 한다.이터레이터는 __next__ 로 반복 가능한 객체의 요소를 하나씩 꺼내다가 더 이상 반환할 요소가 없을 때에는 StopIteration 예외를 발생해야 한다.
__next__ 와 동일한 기능을 제공하는 파이썬 내장함수 `next()` 도 있음.
이터레이터 Class 구현
class CustomIterator: def __init__(self, n:int): self.current = 0 self.end = n def __iter__(self): # 이 Class는 이터레이터(iterator)이면서 동시에 return self # 반복 가능(iterable)한 특성도 지니므로 __iter__를 구현한다. def __next__(self): if self.current < self.end: current = self.current self.current += 1 return current else: raise StopIteration
추가 예정: sentinel, __getitem__
참고:
https://dojang.io/mod/page/view.php?id=2405
파이썬 코딩 도장: 39.1 반복 가능한 객체 알아보기
Unit 39. 이터레이터 사용하기 이터레이터(iterator)는 값을 차례대로 꺼낼 수 있는 객체(object)입니다. 지금까지 for 반복문을 사용할 때 range를 사용했습니다. 만약 100번을 반복한다면 for i in range(100):
dojang.io
07-3 이터레이터와 제너레이터
다음은 늘 사용하던 리스트의 간단한 사용법이다. ```{.python} for a in [1, 2, 3]: print(a) ``` 리스트 [1, 2, 3]을 for 문…
wikidocs.net
'Today_I_Learned > Python' 카테고리의 다른 글
List 정렬 기준, iterable객체의 요소가 iterable 일 때 (0) 2023.11.01 class method vs. static method (1) 2023.09.26 Python3 Scapy에 Read할 수 있는 Packet Header 추가하기(Scapy-2.4.3) (0) 2021.02.15 연산자 Overloading (0) 2021.01.27 __new__, __init__, __call__ Magic method 정리 (0) 2021.01.15