Eh, o da diyor ki: her değişiklikte ilerleyen sağdaki eleman bir kilometre sayacı gibi
iç içe döngüler döngüsü. Bu kalıp, bir lexicographic siparişi oluşturur; böylece, girdinin yineleyicileri sıralanırsa, ürün tuplleri sıralı bir şekilde yayınlanır.
Bu hemen hemen o uygulanmasında işleyiş şekli (Modules/itertoolsmodule.c
)
İşte
devlet nesnesidir:
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;
Ve ertesi öğe bu kullanır fonksiyonu product_next
tarafından döndürülen durum ve sonraki durumu oluşturmak için alıntıda açıklanan algoritma. Bellek gereksinimlerini anlamak için this answer'a bakın.
Genel eğitim için, C uzantıları here'dan itibaren devletli jeneratörler oluşturma hakkında bilgi edinebilirsiniz.
Olası yinelenen [Neden itertools.product ile bir MemoryError alıyorum?] (Http://stackoverflow.com/q/8695422/222914) –