Erfahren Sie, wie dieser alternative Funktionstyp Ihnen helfen kann, den Speicherbedarf zu reduzieren.

Wenn Sie Zeilen aus einer Protokolldatei lesen oder eine lange Liste von Elementen verarbeiten, besteht eine Möglichkeit darin, die gesamten Daten in den Speicher zu laden. Dieser Ansatz kann jedoch viel Speicher verbrauchen und die Leistung beeinträchtigen. Generatoren bieten eine wertvolle Lösung.

Generatoren machen das gleichzeitige Laden aller Daten in den Speicher überflüssig. Sie sind nützlich beim Umgang mit großen Datensätzen, unendlichen Sequenzen oder anderen Szenarios, bei denen die Speichereffizienz von größter Bedeutung ist.

Was sind Generatoren?

Ein Generator ist eine spezielle Funktion, mit der Sie eine Folge von Werten durchlaufen können. Anstatt einen vollständigen Datensatz zurückzugeben, generieren oder liefern sie jeweils einen Wert. Dies macht sie effizient für die Arbeit mit großen oder unbegrenzten Datensequenzen.

A reguläre Python-Funktion Berechnet normalerweise einen Wert und gibt ihn zurück. Aber Generatoren funktionieren anders. Sie können im Laufe der Zeit mehrere Werte liefern, indem die Ausführung zwischen den einzelnen Erträgen angehalten und wieder aufgenommen wird.

instagram viewer

Der Hauptunterschied zwischen regulären Funktionen und Generatoren besteht darin, dass anstelle der Verwendung von zurückkehren Schlüsselwort, um ein Ergebnis zu erzeugen, das von Generatoren verwendet wird Ertrag.

So erstellen Sie einen Generator

Um einen Generator zu erstellen, anstelle des zurückkehren Anweisung, verwenden Sie a Ertrag Anweisung innerhalb der Funktion. Der Ertrag Das Schlüsselwort weist die Funktion nicht nur an, einen Wert zurückzugeben, sondern ermöglicht ihr auch, ihren Zustand zu speichern, um eine spätere Wiederaufnahme zu ermöglichen.

Hier ist ein Beispiel für eine einfache Generatorfunktion:

defnumeric_generator():
yield1
yield2
yield3

gen = numeric_generator()

Diese Generatorfunktion liefert numerische Werte von 1 bis 3.

Der Ertrag Die Anweisung speichert den Status der Funktion und behält lokale Variablen zwischen Aufrufen bei, um fortzufahren, wenn Sie den nächsten Wert anfordern.

Durch das Zuweisen einer Generatorfunktion zu einer Variablen wird ein Generatorobjekt erstellt, mit dem Sie arbeiten können.

Arbeiten mit Generatoren

Generatoren haben mehrere Anwendungen. Sie können sie verwenden in for-Schleifen oder innerhalb von Listenverständnissensowie andere iterierbare Strukturen. Generatoren können auch als Argumente für Funktionen dienen.

Sobald Sie einen Generator erstellt haben, können Sie ihn mithilfe einer for-Schleife durchlaufen:

for i in numeric_generator():
print(i)

Sie können auch die verwenden nächste Funktion, um Werte einzeln abzurufen:

print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3

Dadurch haben Sie mehr Kontrolle über das Generatorobjekt.

Generatoren können ihren Zustand verfolgen. Jede yield-Anweisung in einer Funktion fungiert wie ein Prüfpunkt. Wenn Sie anrufen nächste() Funktion auf dem Generatorobjekt, die Ausführung beginnt am vorherigen Fließpunkt.

Sie können Werte auch mit an einen Generator übergeben schicken():

defgenerator_with_send():
# First yield: Receive a value
x = yield
print(f"Received: {x}")

# Second yield: Receive another value
y = yield
print(f"Received: {y}")

# Third yield: Yield the sum
yield x + y

gen = generator_with_send()

# Start generator and reach first yield
next(gen)

# Send 10 into generator, received at first yield
result = gen.send(10)

# Send 5 into generator, received at second yield
result = gen.send(5)

# Print result of third yield
print(result)

Der schicken() Mit der Methode können Sie Werte vom Generator abrufen und an die Generatorfunktion zurücksenden, wodurch diese effektiv angehalten wird und Sie ihre Ausführung steuern können. Der schicken() Die Methode ist praktisch, wenn Sie Coroutinen schreiben oder Generatoren für fortgeschrittene Zwecke verwenden.

Verwenden von Generatorausdrücken

Generatorausdrücke bieten eine übersichtliche Möglichkeit, einen einfachen und anonymen Generator zu erstellen. Sie ähneln Listenverständnissen, verwenden jedoch Klammern anstelle von Klammern.

Hier ist ein Beispiel:

gen = (i**2for i in range(10))

for x in gen:
print(x)

Der Code erstellt einen Generatorausdruck, der die Quadrate der Zahlen 0 bis 9 liefert. Generatorausdrücke eignen sich ideal zum trägen Generieren einer Wertefolge.

Verwendung von Generatoren zur Datenverarbeitung

Python-Generatoren sind eine praktische Möglichkeit, Datenströme zu beschreiben und Iteratoren zu erstellen, ohne alles im Speicher zu behalten. Sie können Ihre Programmierung erheblich verbessern, indem Sie den Umgang mit Generatoren erlernen und so die Bewältigung anspruchsvoller Datenverarbeitungsaufgaben erleichtern.

Wenn Sie das nächste Mal mit großen Datensätzen arbeiten, denken Sie an Generatoren und delegieren Sie die arbeitsintensiven Aufgaben an sie, damit Ihr Code reaktionsfähig und effizient bleibt.