본문 바로가기

프로그래머/Python

[널널한 교수의 고급 파이썬] 03-2 반복자 객체 생성

03-2 반복자 객체 생성

  • 반복자를 만들기 위해서는 반드시 iter()와 next() 메소드를 그 멤버로 가져야 한다
  • 이 때, iter() 메소드는 반복자 객체 자신(self라는 키워드로 정의 됨)을 반환하여야 하며, next() 메소드는 루프가 돌 때마다 지정된 값을 반환하는 일을 한다

홀수 값을 반환하는 반복자 객체

class OddCounter:
    def __init__(self, n = 1):
        self.n = n

    def __iter__(self):
        return self

    def __next__(self):
        t = self.n
        self.n += 2
        return t

my_counter = OddCounter()
print(next(my_counter))         # 1
print(my_counter__next__())     # 3
print(my_counter__next__())     # 5
print(my_counter__next__())     # 7

1 - 20 사이의 홀수를 출력하는 경우

for 문을 이용해서 1에서 20 사이의 홀수를 출력

class OddCounter:
    def __init__(self, n = 1):
        self.n = n

    def __iter__(self):
        return self

    def __next__(self):
        t = self.n
        self.n += 2
        return t

my_counter = OddCounter()
for x in my_counter:
    if x > 20:
        break
    print(x, end = ' ') # 문장을 출력하고 마지막에 스페이스

특정 조건을 만족하면 StopIteration을 raise

class OddCounter:
    def __init__(self, n = 1):
        self.n = n

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < 20:
            t = self.n
            self.n += 2
            return t
        raise StopIteration

my_counter = OddCounter()
for x in my_counter:
    print(x, end = ' ')

정리

  • 반복자를 만들기 위해서는 반드시 iter()와 next() 메소드를 그 멤버로 가져야 함
  • 이 때, iter() 메소드는 반복자 객체 자신(self라는 키워드로 정의 됨)을 반환함
  • next() 메소드는 루프가 돌 때마다 주어진 값을 반환