Nun, es sagt auch:
Der verschachtelte Schleifen Zyklus wie ein Wegstreckenzähler mit dem ganz rechten Elemente bei jeder Iteration voran. Dieses Muster erzeugt eine lexikographische Reihenfolge, so dass, wenn die Iterables der Eingabe sortiert sind, die Tupel des Produkts in sortierter Reihenfolge ausgegeben werden.
Das ist ziemlich viel, wie es bei der Umsetzung arbeitet (Modules/itertoolsmodule.c
)
ist das Zustandsobjekt:
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;
Und der nächste Punkt wird durch die Funktion product_next
, zurückgegeben, die diese verwenden Zustand und der im Zitat beschriebene Algorithmus, um den nächsten Zustand zu erzeugen. Siehe this answer, um die Speicheranforderungen zu verstehen.
Für allgemeine Bildung können Sie lesen, wie Generatoren mit Status von C-Erweiterungen here erstellen.
Mögliche Duplikate von [Warum erhalte ich einen MemoryError mit itertools.product?] (Http://stackoverflow.com/q/8695422/222914) –