프로그래밍 언어/Python

파이썬 생성기와 반복기의 차이점

Rateye 2021. 11. 24. 12:32
728x90
반응형
질문 : 파이썬 생성기와 반복기의 차이점

반복기와 생성기의 차이점은 무엇입니까? 각 사례를 사용하는 경우에 대한 몇 가지 예가 도움이 될 것입니다.

답변

iterator 는 좀 더 일반적인 개념입니다 : 클래스에 __next__ 메서드 (파이썬 2의 next return self __iter__ 메서드가있는 모든 객체입니다.

모든 생성기는 반복자이지만 그 반대는 아닙니다. yield 표현식 (Python 2.5 및 이전 버전의 yield 문)이있는 함수를 호출하여 빌드되며 iterator 정의를 충족하는 객체입니다.

__next__ (및 __iter____init__ ) 이외의 다른 메서드를 노출하려는 경우 생성기보다는 사용자 지정 반복기를 사용할 수 있습니다. 대부분의 경우 제너레이터 (때로는 충분히 간단한 요구를 위해 제너레이터 표현식 )로 충분하며, 상태 유지 (합리적인 제한 내에서)는 기본적으로 프레임이 일시 중단 및 재개 됨으로써 "당신을 위해 수행"되기 때문에 코딩이 더 간단합니다.

예를 들어 다음과 같은 생성기가 있습니다.

def squares(start, stop):
    for i in range(start, stop):
        yield i * i

generator = squares(a, b)

또는 동등한 생성기 표현식 (genexp)

generator = (i*i for i in range(a, b))

사용자 지정 반복자로 빌드하려면 더 많은 코드가 필요합니다.

class Squares(object):
    def __init__(self, start, stop):
       self.start = start
       self.stop = stop
    def __iter__(self): return self
    def __next__(self): # next in Python 2
       if self.start >= self.stop:
           raise StopIteration
       current = self.start * self.start
       self.start += 1
       return current

iterator = Squares(a, b)

Squares 클래스를 사용하면 추가 메서드를 쉽게 제공 할 수 있습니다.

    def current(self):
       return self.start

응용 프로그램에 이러한 추가 기능이 실제로 필요한 경우.

출처 : https://stackoverflow.com/questions/2776829/difference-between-pythons-generators-and-iterators
728x90
반응형