Bueno, también dice:
El ciclo de bucles anidados como un odómetro con el elemento más a la derecha avanzar en cada iteración. Este patrón crea un orden lexicográfico de de modo que si los iterables de la entrada están ordenados, las tuplas del producto se emiten en orden ordenado.
Esto es más o menos cómo funciona en la aplicación (Modules/itertoolsmodule.c
)
Aquí es el objeto de estado:
typedef struct {
PyObject_HEAD
PyObject *pools; /* tuple of pool tuples */
Py_ssize_t *indices; /* one index per pool */
PyObject *result; /* most recently returned result tuple */
int stopped; /* set to 1 when the product iterator is exhausted */
} productobject;
Y el siguiente artículo es devuelto por la función product_next
, que utiliza esta estado y el algoritmo descrito en la cita para generar el siguiente estado. Consulte this answer para comprender los requisitos de memoria.
Para la educación general, puede leer acerca de cómo crear generadores con estado desde las extensiones C here.
Posible duplicado de [¿Por qué obtengo un MemoryError con itertools.product?] (Http://stackoverflow.com/q/8695422/222914) –