제너레이터는 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=' ')