Python에서 Iterator와 Generator 구별하기

Jesse John 2023년1월30일
  1. 파이썬의 반복자
  2. 파이썬의 생성기
  3. Python의 Iterator 및 Generator 예제
  4. 결론
Python에서 Iterator와 Generator 구별하기

반복자와 생성기는 출력을 생성하거나 일부 코드를 한 번에 한 비트씩 반복적으로 처리하는 데 도움이 됩니다. 이 기사에서는 간단한 예제를 통해 Python의 반복자와 생성기 간의 몇 가지 기본적인 차이점을 배웁니다.

파이썬의 반복자

Iterator의 기본 기능은 다음과 같습니다.

  1. 반복자는 반복자 프로토콜을 구현하는 클래스를 사용하여 생성된 객체입니다. 이는 클래스에 __iter____next__ 메서드가 정의되어 있음을 의미합니다.
  2. __next__ 메서드는 return 문을 사용하여 값을 반환합니다. return 문은 해당 메서드의 마지막 라인이어야 하므로 return 문 전에 __next__의 다음 실행에서 사용할 변수를 업데이트해야 합니다.

가장 간단한 경우, __iter__self를 반환합니다.

파이썬의 생성기

발전기의 기본 기능은 다음과 같습니다.

  1. 발전기는 함수입니다.
  2. 생성기 함수는 return 키워드 대신 yield 키워드를 사용합니다.
    2.1 yield 키워드는 값을 산출하고 함수의 실행을 일시 중단합니다.
    2.2 next()에 대한 다음 호출은 yield 문 다음의 코드 실행을 재개합니다.

생성기 함수를 사용하면 클래스를 사용하여 반복기를 만들 때 필요한 모든 추가 코드 없이 생성기 반복기를 만들 수 있습니다.

Python의 Iterator 및 Generator 예제

다음 두 가지 예는 이전 두 섹션에서 언급한 요점을 강조합니다. 두 예 모두 1부터 시작하는 정수의 제곱을 생성하는 방법을 보여줍니다.

첫 번째 예는 반복자를 사용하여 수행하는 방법을 보여줍니다. 두 번째 예는 생성기를 사용하는 동등한 코드를 보여줍니다.

Iterator에 대한 예제 코드:

# ITERATOR (Class)


class squares(object):
    def __init__(self, num1):
        self.nxt_sq_of = 1
        self.lim = num1

    def __iter__(self):
        return self

    def __next__(self):

        if self.nxt_sq_of <= self.lim:
            ret_sq_of = self.nxt_sq_of
            self.nxt_sq_of += 1
            return ret_sq_of * ret_sq_of
        else:
            raise StopIteration


# Iterator Object
a = squares(6)

# Next value of the iterator.
next(a)
next(a)
next(a)
next(a)
next(a)
next(a)
next(a)
next(a)


# Using the iterator in a loop.
a1 = squares(6)

while True:
    print(next(a1))

출력:

next(a)
Out[3]: 1

next(a)
Out[4]: 4

next(a)
Out[5]: 9

next(a)
Out[6]: 16

next(a)
Out[7]: 25

next(a)
Out[8]: 36

next(a)
Traceback (most recent call last):

  File "<ipython-input-9-15841f3f11d4>", line 1, in <module>
    next(a)

  File "<ipython-input-1-9dbe8e565876>", line 17, in __next__
    raise StopIteration

StopIteration

생성기에 대한 예제 코드:

# GENERATOR FUNCTION


def gen_squares(num2):
    i = 1
    while i <= num2:
        yield i * i
        i += 1


# Generator iterator.
b = gen_squares(5)

# Next yield of the generator iterator.
next(b)
next(b)
next(b)
next(b)
next(b)
next(b)

출력:

next(b)
Out[3]: 1

next(b)
Out[4]: 4

next(b)
Out[5]: 9

next(b)
Out[6]: 16

next(b)
Out[7]: 25

next(b)
Traceback (most recent call last):

  File "<ipython-input-8-adb3e17b0219>", line 1, in <module>
    next(b)

StopIteration

결론

우리는 파이썬의 생성기를 사용하여 생성기 반복자를 생성하는 간결한 코드를 작성할 수 있다는 것을 알게 되었습니다.

반면에 Iterator는 프로그래머가 __iter__ 메서드에 대한 사용자 정의 코드를 작성할 수 있도록 해주기 때문에 훨씬 더 강력합니다.

자세한 내용은 다음을 참조하십시오.

  1. generators를 위한 Python Wiki 기사.
  2. iterators를 위한 Python Wiki 기사.
작가: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

관련 문장 - Python Iterator

관련 문장 - Python Generator