제너레이터 표현식은 지능형 리스트의 느긋한 버전으로 리스트를 생성하는 대신, 필요에 따라 항목을 느긋하게 생성하는 제너레이터를 반환하므로 지능형 리스트가 리스트 팩토리라면, 제너레이터 표현식은 제너레이터 팩토리라고 생각할 수 있다.
def gen_AB():
print('start')
yield 'A'
print('continue')
yield 'B'
print('end.')
res1 = [x*3 for x in gen_AB()]
for i in res1:
print('-->', i)
res2 = (x*3 for x in gen_AB())
res2
for i in res2:
print('-->', i)
제너레이터 표현식은 제너레이터를 생성하고, 이 표현식을 사용하면 Sentence 클래스의 코드를 더 짧게 만들 수 있다.
import re
import reprlib
RE_WORD = re.compile('\w+')
class Sentence:
def __init__(self, text):
self.text = text
def __repr__(self):
return 'Sentence(%s)' reprlib.repr(self.text)
def __iter__(self):
return (match.group() for match in RE_WORD.finditer(self.text))
제너레이터 함수가 아니면, 제너레이터를 생성해서 반환하는 제너레이터 표현식을 사용한다.
제너레이터 표현식은 편리 구문으로, 제너레이터 함수로 대체할 수 있지만, 더 편한 경우도 있다.