Wann ist kein guter Zeitpunkt, um Python-Generatoren zu verwenden?

Dies ist eher das Gegenteil vonWofür können Sie Python-Generatorfunktionen verwenden?: Python-Generatoren, Generator-Ausdrücke und dieitertools Modul sind einige meiner Lieblingsfunktionen von Python in diesen Tagen. Sie sind besonders nützlich, wenn Sie Operationsketten für einen großen Datenstapel einrichten. Ich verwende sie oft, wenn ich DSV-Dateien verarbeite.

Also wann ist es?nicht Ein guter Zeitpunkt, um einen Generator oder einen Generatorausdruck oder einenitertools Funktion?

Wann sollte ich bevorzugenzip() Überitertools.izip(), oderrange() Überxrange(), oder[x for x in foo] Über(x for x in foo)?

Offensichtlich müssen wir irgendwann einen Generator in tatsächliche Daten "auflösen", indem wir normalerweise eine Liste erstellen oder mit einer Nicht-Generator-Schleife darüber iterieren. Manchmal müssen wir nur die Länge kennen. Das frage ich nicht.

Wir verwenden Generatoren, damit wir keine neuen Listen für Zwischendaten in den Speicher zuweisen. Dies ist insbesondere bei großen Datenmengen sinnvoll. Ist es auch für kleine Datensätze sinnvoll? Gibt es einen merklichen Kompromiss zwischen Speicher und CPU?

Ich bin besonders interessiert, wenn jemand im Lichte der augenöffnenden Diskussion von ein Profil dazu erstellt hatListenverständnisleistung vs. Karte () und Filter (). (Alt Link)

Antworten auf die Frage(9)

Ihre Antwort auf die Frage