이터레이터(iterator)는 값을 차례대로 꺼낼 수 있는 객체(object)입니다.
반복 가능한 객체(iterable)는 말 그대로 반복할 수 있는 객체인데 우리가 흔히 사용하는 문자열, 리스트, 딕셔너리, 세트가 반복 가능한 객체입니다. 즉, 요소가 여러 개 들어있고, 한 번에 하나씩 꺼낼 수 있는 객체입니다.
dir 함수를 사용하여 __iter__ 메서드가 들어있으면 iterable객체이다.
L=[1,2,3]
it = L.__iter__() # == iter(L)
for i in range(len(L)):
result = it.__next__() # == next(it)
print(result)
이더레이터 만들기
__init__ 메서드와 __getitem__ 메서드만 있는데도 동작이 잘 됩니다.
__iter__, __next__는 생략해도 됩니다(초깃값이 없다면 __init__도 생략 가능).
class 이터레이터이름:
def __iter__(self):
코드
def __next__(self):
코드
def __getitem__(self, 인덱스):
코드
class Counter(list):
def __init__(self, stop):
super().__init__()
self.current = 0 # 현재 숫자 유지, 0부터 지정된 숫자 직전까지 반복
self.stop = stop # 반복을 끝낼 숫자
def __iter__(self):
return self # 현재 인스턴스를 반환
def __next__(self):
if self.current < self.stop: # 현재 숫자가 반복을 끝낼 숫자보다 작을 때
r = self.current*10 # 반환할 숫자를 변수에 저장
self.current += 1 # 현재 숫자를 1 증가시킴
return r # 숫자를 반환
else: # 현재 숫자가 반복을 끝낼 숫자보다 크거나 같을 때
raise StopIteration # 예외 발생
def __getitem__(self, index):
if index < self.stop:
return index*10
else:
raise IndexError
for i in Counter(3):
print(i, end=' ')
print()
co = Counter(3)
for j in range(3):
print(co[j], end=' ')
이더레이터 활용
이더레이터 생성 : iter(iterable객체, [반복을 끝낼값])
import random
it = iter(lambda :random.randint(0,5),2)
for i in it:
print(i,end=' ')
next 사용 : next(iterable객체, 기본값)
기본값 : StopIteration예외 발생시 반환할 값
import random
it = iter(range(3))
for i in range(5):
print(next(it,'fault'))
'Python Basic' 카테고리의 다른 글
제너레이터(generator) (0) | 2022.11.23 |
---|---|
Exception (0) | 2022.11.23 |
decorator 사용법 (0) | 2022.11.23 |
closure 사용법 (0) | 2022.11.23 |
Programming productivity tools (0) | 2022.11.08 |