WikiDer > Generator (Informatik)

Generator (informatica)

In dem Informatik ist ein Generator ein Funktion die man verwenden kann für iterieren jetzt sofort Schleife. Ein Generator generiert eine Reihe von Werten, die dann in einer Schleife durchlaufen werden können. Diese Werte werden nacheinander zurückgegeben und jedes Mal, wenn der Generator einen Wert zurückgibt, kann die Schleife einmal ausgeführt werden. Indem ein Wert nur berechnet wird, wenn er benötigt wird, kann dies effizienteren Code ergeben.

Ein Generator verhält sich wie a Iterator Das hier Datenstruktur fährt fort, aber ein Generator sieht aus wie eine Funktion. Ein Generator übernimmt sowohl die Berechnung der Werte als auch deren Traversierung, während ein Iterator nur durch eine vorhandene Datenstruktur iteriert.

Beispiele

Python

Generator

Im Python ein Generator wird konstruiert mit dem StichwortAusbeute. Gibt einen Wert zurück. Dieses Schlüsselwort kann in einer Funktion verwendet werden, die es in einen Generator verwandelt.

Der folgende Generator erzeugt gerade Zahlen:

defgerade Zahlen():ich=0währendwahr:wennich%2==0:Ausbeuteichich =1

Dies kann wie folgt verwendet werden:

zumjaimgerade Zahlen():# mach was mit dir

Der Generator gerade Zahlen gibt jetzt immer eine Zahl zurück (ja), die in der Schleife verwendet werden kann. Diese Schleife wird fortgesetzt, solange der Generator weiterhin Werte zurückgibt. Jedes Mal, wenn der Generator einen Wert zurückgibt, wird die Ausführung des Generators angehalten und die Schleife einmal ausgeführt. Wenn dies erledigt ist, nimmt der Generator die Ausführung wieder auf.

Wenn der Generator vollständig ausgeführt ist, wird die Schleife nicht mehr ausgeführt, da keine Werte mehr vorhanden sind. In diesem Beispiel gibt der Generator immer wieder Zahlen zurück, sodass Sie in der Schleife feststellen müssen, wann Sie bereit sind. Sobald die Schleifenausführung beendet ist, wird der Generator nicht mehr benötigt, um Werte zu generieren.

Generator-Ausdruck

In Python gibt es auch Generatorausdrücke, mit denen Generatoren in Form von a . notiert werden können Ausdruck. Diese Generatorausdrücke können nur zum-Schleifen und wenn-Aussagen enthalten.

Ein Beispiel für einen Generatorausdruck, der alle Zahlen unter 1000 generiert, die durch drei teilbar sind:

G=(neinzumneinimReichweite(1000)wennnein%3==0)

G ist jetzt ein Generator, der genauso verwendet werden kann wie gerade Zahlen im vorherigen Beispiel.

Der obige Generatorausdruck kann auch geschrieben werden als:

defG():zumneinimReichweite(1000):wennnein%3==0:Ausbeutenein

Haskell

Im Listenverständnis im Haskell Auch Generatoren kommen zum Einsatz. In diesem Fall handelt es sich um betref Listen aus denen Werte immer in einem Listenverständnis zurückgegeben werden.

Ein Beispiel für ein Listenverständnis:

[ 2 * x | x <- [0..], x * x > 10 ]

Hier ist x <- [0..] ein Generator: X nimmt immer einen (nächsten) Wert aus der Liste [0..].