파이썬심화-2 이터레이터
Iterable
- 반복가능한 객체를 iterable 객체라고 함
- 대표적으로 리스트, 튜플, 세트, str 등을 iterable 객체라고 함
Iterator
- 값을 차례대로 꺼낼 수 있는 객체를 iterator 객체 라고함
- Iterable 하다고 해서 모두 Iterator는 아님
-
그 값을 한번 읽으면 그 값을 다시 읽을 수 없음
- iterator는 iterable한 객체를
iter()
또는__iter__()
메서드로 생성
a = [1, 2, 3]
ai = iter(a)
print(type(ai))
ai = a.__iter__()
print(type(ai))
<class 'list_iterator'>
<class 'list_iterator'>
- 값을 꺼낼 때는
next()
를 사용하여 꺼내꺼나__next__()
를 사용하여 꺼냄 - 더 반환할 값이 없으면
StopIteration
예외가 발생
print(next(ai)) # ai.__next__()
print(next(ai)) # ai.__next__()
print(next(ai)) # ai.__next__()
# print(next(ai))
1
2
3
- for문을 사용하여 값을 가져올 수 있음
- for문이 자동으로
next()
를 호출하고 예외도 알아서 처리 - for는 iterable한 객체를 iterator로 만들어서 하나씩 값을 꺼내는 역할을 수행함
a = [1, 2, 3]
ia = iter(a)
for i in ia:
print(i)
1
2
3
이터레이터 만들기
- 클래스를 이용해서 세부적인 이터레이터를 만들 수 있음
class MyFunc:
def __init__(self, start, stop):
self.start = start
self.stop = stop
def __iter__(self):
return self # iterable한 객체가 없으므로 현재 인스턴스를 반환
def __next__(self):
if self.start <= self.stop:
result = self.start
self.start += 1
return result
else:
raise StopIteration
a = MyFunc(1, 10)
for i in a:
print(i)
1
2
3
4
5
6
7
8
9
10
이터레이터 언패킹
- 이터레이터의 결과를 변수 여러 개에 할당이 가능
- 이터레이터가 반복하는 횟수와 변수의 개수는 같아야함
a, b, c = MyFunc(1, 3)
print(a)
print(b)
print(c)
1
2
3
댓글남기기