728x90
반응형
질문 : 기본 Python 반복기 빌드
파이썬에서 반복 함수 (또는 반복기 객체)를 어떻게 생성할까요?
답변
파이썬의 반복자 객체는 반복자 프로토콜을 __iter__()
및 __next__()
두 가지 메서드를 제공한다는 것을 의미합니다.
__iter__
는 반복기 객체를 반환하며 루프 시작시 암시 적으로 호출됩니다.__next__()
메서드는 다음 값을 반환하며 각 루프 증분에서 암시 적으로 호출됩니다. 이 메서드는 반환 할 값이 더 이상 없을 때 StopIteration 예외를 발생시킵니다.이 예외는 반복을 중지하기 위해 반복 구조를 통해 암시 적으로 캡처됩니다.
다음은 카운터의 간단한 예입니다.
class Counter:
def __init__(self, low, high):
self.current = low - 1
self.high = high
def __iter__(self):
return self
def __next__(self): # Python 2: def next(self)
self.current += 1
if self.current < self.high:
return self.current
raise StopIteration
for c in Counter(3, 9):
print(c)
다음과 같이 인쇄됩니다.
3
4
5
6
7
8
이전 답변에서 다룬 것처럼 생성기를 사용하여 작성하는 것이 더 쉽습니다.
def counter(low, high):
current = low
while current < high:
yield current
current += 1
for c in counter(3, 9):
print(c)
인쇄 된 출력은 동일합니다. 내부적으로 생성기 객체는 반복기 프로토콜을 지원하고 Counter 클래스와 거의 유사한 작업을 수행합니다.
David Mertz의 기사 인 Iterators and Simple Generators 는 꽤 좋은 소개입니다.
출처 : https://stackoverflow.com/questions/19151/build-a-basic-python-iterator
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Pandas에서 열 이름 바꾸기 (0) | 2021.10.08 |
---|---|
파이썬의 람다에서 "if"를 수행하는 방법 (0) | 2021.10.08 |
파이썬 클래스가 객체를 상속하는 이유 (0) | 2021.10.07 |
파이썬에서 배열의 마지막 요소 가져오기 (0) | 2021.10.07 |
Python의 subprocess.PIPE에 대한 비 차단 읽기 (0) | 2021.10.06 |