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
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬 f- 문자열로 소수점 뒤의 자릿수를 수정하는 쉬운 방법 (0) | 2021.11.24 |
---|---|
Python에서 파일 생성 및 수정 날짜 / 시간을 얻는 방법 (0) | 2021.11.24 |
Python의 문자열 비교 : is vs == (0) | 2021.11.23 |
Python에서 상대 가져 오기를 수행하는 방법 (0) | 2021.11.23 |
Python의 open ()은 파일이 없으면 파일을 생성해서 쓰는 방법 (0) | 2021.11.23 |