Beh, si dice anche:
Il nidificato ciclo di loop come un contachilometri con l'elemento più a destra avanzando su ogni iterazione. Questo modello crea un ordinamento lessicografico in modo tale che se i file iterati dell'input vengono ordinati, le tuple del prodotto vengono emesse in ordine.
Questo è più o meno come funziona nella realizzazione (Modules/itertoolsmodule.c
)
Ecco l'oggetto Stato:
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;
E il prossimo articolo è restituito dalla funzione product_next
, che utilizza questo stato e l'algoritmo descritto nella citazione per generare lo stato successivo. Vedere this answer per comprendere i requisiti di memoria.
Per l'istruzione generale, è possibile leggere come creare generatori con stato dalle estensioni C here.
fonte
2012-05-23 12:56:11
Possibile duplicato di [Perché viene visualizzato un errore MemoryError con itertools.product?] (Http://stackoverflow.com/q/8695422/222914) –