** Hinweise zu effektivem Python ** Punkt 9 Betrachten Sie eine Generatorformel für die Notation großer Einschlüsse (S. 18 ~ 20).
Es gibt einige Probleme bei der Verarbeitung von Einschlüssen mit großen Datenmengen.
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)
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