Vale agregar qué sucede cuando FOR toma un generador. Para entenderlo, intentemos simularlo con un while:
Código Python:
Ver originalwhile(true):
try:
n = generador.next()
except StopIteration:
break
Es decir, el for llama al método next() que obtiene el siguiente elemento del generador, hasta que éste indica su finalización lanzando un StopIteration