파이썬심화-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
      
댓글남기기