Dies ist eher die Umkehrung von Wofür können Sie Python-Generatorfunktionen verwenden? : Python-Generatoren, Generatorausdrücke und das itertools
Modul sind einige meiner Lieblingsfunktionen von Python in diesen Tagen. Sie sind besonders nützlich, wenn Sie Betriebsketten einrichten, die für einen großen Datenstapel ausgeführt werden sollen. Ich verwende sie häufig bei der Verarbeitung von DSV-Dateien.
Wann ist es also kein guter Zeitpunkt, einen Generator, einen Generatorausdruck oder eine itertools
Funktion zu verwenden?
- Wann sollte ich lieber
zip()
alsitertools.izip()
oder range()
vorbeixrange()
oder[x for x in foo]
vorbei(x for x in foo)
?
Offensichtlich müssen wir irgendwann einen Generator in tatsächliche Daten "auflösen", normalerweise indem wir 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 im Speicher zuweisen. Dies ist insbesondere bei großen Datenmengen sinnvoll. Ist es auch für kleine Datensätze sinnvoll? Gibt es einen spürbaren Kompromiss zwischen Speicher und CPU?
Ich bin besonders interessiert, wenn jemand ein Profil erstellt hat, angesichts der aufschlussreichen Diskussion über die Leistung des Listenverständnisses im Vergleich zu map () und filter () . ( Alt Link )
<5
.