Effektives Python-Memo-Element 9 Betrachten Sie einen Generatorausdruck für die Notation großer Einschlüsse

** Hinweise zu effektivem Python ** Punkt 9 Betrachten Sie eine Generatorformel für die Notation großer Einschlüsse (S. 18 ~ 20).

Verwenden Sie Generatoren, wenn Sie mit großen Listen arbeiten

Es gibt einige Probleme bei der Verarbeitung von Einschlüssen mit großen Datenmengen.

  1. (Abhängig vom Prozess) kann eine neue Liste generieren
  2. Beim Aufrufen einer Schleifenanweisung usw. wird alles im Speicher erweitert, was zu einem Speicherabsturz führen kann.

Der Generator löst auch diese Probleme. Der Vorteil des Generators besteht darin, dass er nicht jedes Mal die gesamte Sequenz aufruft. Da es einzeln aufgerufen und verarbeitet wird, gibt es fast keine Bedenken hinsichtlich eines Speicherüberlaufs.

Der Generatorausdruck ähnelt in der Syntax der Einschlussnotation und wird in () anstelle von [] geschrieben.

my_lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
it = (x for x in my_lists)
print(it)

>>>
<generator object <genexpr> at 0x103fe93a8>

※Hinweis Es ist das Generatorobjekt, das vom Generatorausdruck zurückgegeben wird, nicht der Wert. Verwenden Sie zum Generieren eines Werts die Funktion next (), um den Wert zu generieren. Auch hier generiert der Generator keine Werte!

print(next(it))
print(next(it))

>>>
1
2

Sie können den von einem Generator zurückgegebenen Iterator auch sofort einem anderen Generator zuweisen.

my_lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
it = (x for x in my_lists)
roots = ((x, x ** 0.5) for x in it)
print(next(roots))
print(next(roots))

>>>
(1, 1.0)
(2, 1.4142135623730951)

Zusammenfassung

Wir haben die Verarbeitungszeit dieses Mal nicht geplant, aber aufgrund der Eigenschaften des Generators wird es nicht viel Zeit dauern. Daher ist es eine sehr bequeme Funktion zum Verarbeiten großer Datenmengen.

Recommended Posts

Effektives Python-Memo-Element 9 Betrachten Sie einen Generatorausdruck für die Notation großer Einschlüsse
EP 9 Betrachten Sie Generatorausdrücke für ein umfassendes Verständnis
Effektives Python-Memo Punkt 3
Effektives Python-Memo-Element 8 Vermeiden Sie drei oder mehr Ausdrücke in der Listeneinschlussnotation
Effektiver Python-Hinweis Punkt 16 Erwägen Sie, einen Generator zurückzugeben, ohne eine Liste zurückzugeben
Effektives Python-Memo Punkt 10 Aufzählung aus der Reichweite
Python-Memo (für mich): Array
Persönliches Python-Code-Memo
Effektives Python-Memo-Element 19 Geben Sie Schlüsselwortargumenten optionales Verhalten
Effektives Python-Memo Element 11 Verwenden Sie zip, um Iteratoren parallel zu verarbeiten
Effektiver Python-Hinweis Punkt 17 Respektieren Sie die Sicherheit, wenn Sie Iteratoren für Argumente verwenden
Effektives Python-Memo Element 4 Schreiben Sie eine Hilfsfunktion anstelle eines komplizierten Ausdrucks
Effektives Python-Memo Element 7 Verwenden Sie die Listeneinschlussnotation anstelle von Karte und Filter
Inklusive Notation von Python (über Liste und Generatorausdruck) [zusätzlich]
Effektives Python-Memo-Element 18 Verwenden Sie Positionsargumente variabler Länge, um das Erscheinungsbild sauberer zu gestalten
Effektiver Python-Hinweis Punkt 12 Vermeiden Sie die Verwendung von else-Blöcken nach for- und while-Schleifen