¿Itertools.product evalúa sus argumentos perezosamente?

Lo siguiente nunca imprime nada en Python 3.6

from itertools import product, count

for f in product(count(), [1,2]): 
    print(f)

En cambio, simplemente se queda allí y quema la CPU. El problema parece ser queproduct nunca devuelve un iterador si está sobre un espacio infinito porque evalúa la totalidadproduct primero. Esto es sorprendente dado que elproduct Se supone que es un generador.

Hubiera esperado que esto comenzara a contar (hasta el infinito), algo así como el comportamiento de este generador (tomadodirectamente de los documentos):

for tup in ((x,y) for x in count() for y in [1,2]):
    print(tup)

Pero mientras mi generador comienza a contar de inmediato, el que usaproduct nunca cuenta en absoluto.

Otras herramientas enitertools haz lo que esperaría. Por ejemplo, lo siguiente:

for f in takewhile(lambda x: True, count()): 
    print(f)

imprimirá una secuencia de números porquetakewhile es perezoso.

Respuestas a la pregunta(0)

Su respuesta a la pregunta