더북(TheBook)

제너레이터는 for 문에서 사용할 수 있으며, 빈번하게 쓰인다. 가령 다음과 같이 make_evens_gen을 호출할 수 있다.

for i in make_evens_gen():
    print(i, end=' ')

결과는 예상과 같다.

2 4 6 8 10

하지만 실제로 어떻게 동작하는지 살펴보자. for 블록은 make_evens_gen을 한 번만 호출한다. 호출한 결과로 제너레이터 객체를 확보하게 된다. 그 객체는 for 루프 안에서 값을 제공한다. 다음 코드는 제너레이터 생성 부분이 첫 줄에 분리되었을 뿐 앞 코드와 똑같이 동작한다.

>>> my_gen = make_evens_gen()
>>> for i in my_gen:
    print(i, end=' ')

my_gen이 이터레이터 객체인 것을 기억하자. 만약 make_evens_gen을 직접 참조하려고 하면 파이썬은 예외를 발생한다.

for i in make_evens_gen:      # 에러! 이터러블이 아니다!
    print(i, end=' ')
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.