Seite 1 von 1

itertools.product MemoryError

Verfasst: Montag 28. Februar 2011, 22:34
von Xynon1
Sagt mal ist das wirklich so gewollt oder ein Design-Fehler ?

Ich bekomme desöfteren einen MemoryError beim Nutzen der "itertools.product"-Funktion.
In Anahme das die Funktion tatsächlich wie in der Doku aussieht:

Code: Alles auswählen

def product(*args, **kwds):
        pools = map(tuple, args) * kwds.get('repeat', 1)
        result = [[]]
        for pool in pools:
            result = [x+[y] for x in result for y in pool]
        for prod in result:
            yield tuple(prod)
Ist auch klar warum bei einer hohen Anzahl ein MemoryError geworfen wird, da "result" schlicht zu groß wird.

Meine Frage ist jetzt: Warum wird hier "result" kein Generatorausdruck zugewiesen, gibt es dafür irgendeinen bestimmten Grund?

Re: itertools.product MemoryError

Verfasst: Montag 28. Februar 2011, 23:10
von ms4py
Xynon1 hat geschrieben:Meine Frage ist jetzt: Warum wird hier "result" kein Generatorausdruck zugewiesen, gibt es dafür irgendeinen bestimmten Grund?
Steht doch da, dass das in der tatsächlichen Implementierung nicht so gemacht wird:
This function is equivalent to the following code, except that the actual implementation does not build up intermediate results in memory:

Re: itertools.product MemoryError

Verfasst: Dienstag 1. März 2011, 08:50
von Xynon1
Ah, danke hatte ich überlesen.

Eine Frage noch, wo kann man eigentlich von den Nicht-Source-Modulen die Quelltexte einsehen, findet man die irgendwo im Netz?

Re: itertools.product MemoryError

Verfasst: Dienstag 1. März 2011, 11:13
von cofi

Re: itertools.product MemoryError

Verfasst: Dienstag 1. März 2011, 11:31
von Xynon1
Danke