고전적인 반복자

매일 공부(ML)·2023년 3월 24일
0

Fluent Python

목록 보기
99/130

제어 흐름

반복형, 반복자, 제너레이터

고전적인 반복자

Sentence 클래스의 다음 버전은 고전적인 반복자 패턴에 맞춰 구현하고, 리팩토링하면서 명확해지지만, 파이썬의 관용적인 방법은 아니다.

iter() 특별 메서드를 구현하고 있고, 이 메서드가 SentenceIterator를 반환하기 때문이다.

"""
반복형과 반복자의 차이 및 이 둘이 어떻게 명확히 보여주기 위해 다음과 같이 구현한다.
"""
import re
import reprlib

RE_WORD = re.compile('\w+')

class Sentence:
	
    def __init__(self, text):
    	self.text = text
        self.words = RE_WORD.findall(text)
    
    def __repr__(self):
    	return 'Sentence(%s)' % reprlib.repr(self.text)
        
    def __iter__(self):
    	return SentenceIterator(self.words)
        
class SentenceIterator:

	def __init__(self,words):	
    	self.words = words
   		self.index = 0
        
    def __next__(self):
    	try:
    		word = self.words[self.index]
        except IndexError:
        	raise StopIteration()
        self.index += 1
        return word
    def __iter__(self):
    	return self
profile
성장을 도울 아카이빙 블로그

0개의 댓글