Python-Generator

Iteratoren spielen in Python eine wichtige Rolle. Sie ermöglichen es Ihnen, ein Objekt zu erstellen, das iteriert werden kann. Dies ist eine gute Möglichkeit, Daten zu speichern, auf die uber eine for-in-Schleife zugegriffen werden kann.

Das Problem mit Iteratoren besteht darin, dass es viel Arbeit erfordert, einen zu erstellen. Sie sind nutzlich, aber Sie mussen viel Code schreiben, damit einer funktioniert. Generatoren helfen, dieses Problem zu lösen.

In diesem Leitfaden werden wir daruber sprechen, was Python-Generatoren sind und warum Sie sie verwenden sollten. Wir implementieren auch einen Generator in Python, damit Sie verstehen, wie sie funktionieren.

Lass uns ohne weiteres loslegen!

Was ist ein Generator?

Ein Generator ist eine einfache Möglichkeit zum Erstellen eines Iterators in Python. Es ist eine Funktion, die ein Objekt zuruckgibt, uber das Sie iterieren können.

Generatoren werden oft als syntaktischer Zucker bezeichnet. Dies liegt daran, dass sie Python nicht unbedingt neue Funktionen hinzufugen. Sie tragen dazu bei, Ihren Code effizienter zu machen.

Wie Iteratoren können Sie einen Generator nur einmal durchlaufen. Dies liegt daran, dass Generatoren verfolgen, wie oft sie iteriert wurden und nicht zuruckgesetzt werden können.

Schauen wir uns einen Python-Iterator an:

81 % der Teilnehmer gaben an, dass sie sich nach dem Besuch eines Bootcamps hinsichtlich ihrer Berufsaussichten im Tech-Bereich sicherer fuhlten. Lassen Sie sich noch heute in ein Bootcamp einweisen.

Der durchschnittliche Bootcamp-Absolvent verbrachte weniger als sechs Monate im Karriereubergang, vom Beginn eines Bootcamps bis zur Suche nach seinem ersten Job.

Dieser Code erstellt einen Iterator namens Kekse. Wenn Sie Daten durch diesen Iterator ubergeben, werden sie in ein iterierbares Objekt umgewandelt. Das bedeutet, dass Sie die Daten mit einer for-in-Schleife durchlaufen können. Wenn Sie sich diesen Code ansehen und denken, dass er sehr lang ist, liegt das daran, dass er es ist.

Generatoren können uns helfen, diesen Code zu kurzen. Lassen Sie uns einen Generator fur unseren obigen Iterator schreiben:

Unser Code wurde drastisch verkleinert. Lassen Sie uns besprechen, wie dies funktioniert.

Ein Generator ist eine Funktion, die ein yield-Schlusselwort anstelle einer return-Anweisung hat. Yield-Anweisungen geben einen Wert von einer Funktion zuruck.

Der Unterschied zwischen einer yield-Anweisung und einer return-Anweisung besteht darin, dass eine return-Anweisung die Ausfuhrung einer Funktion stoppt, während eine yield-Anweisung die Funktion anhält und weiterläuft iterieren.

Versuchen wir, unsere einfache Generatorfunktion zu durchlaufen:

Unser Code gibt zuruck:

Himbeere

Raspberry

…

Dieser Code wiederholt sich, bis wir unser Programm stoppen, weil wir eine while-Schleife verwendet haben, die ausgefuhrt wird fur immer. Dies ist in den meisten Fällen nicht sehr nutzlich. Schreiben wir einen Generator, der stoppt, wenn eine Aktion ausgefuhrt wurde.

Wie man einen Python-Generator schreibt

Wir haben eine Liste der Cookies, die wir an die Konsole ausgeben möchten. Diese Liste sieht wie folgt aus:

["Raspberry‚", "Choc-Chip‚", "Cinnamon‚", &ldquo ;Hafer‚"]

Um diese auf der Konsole auszudrucken, könnten wir cre einen einfachen Generator gegessen. Öffnen Sie eine neue Python-Datei und fugen Sie den folgenden Code ein:

Unser Generator geht jedes Cookie in der von uns angegebenen Liste durch und gibt jedes Cookie einzeln zuruck. Dieser Generator funktioniert noch nicht. Wir mussen eine for-Schleife verwenden, um daruber zu iterieren:

Wir haben ein Array namens cookie_list, der eine Liste von vier Cookies speichert. Wir haben dann eine for-Schleife eingerichtet, die unseren Generator verwendet, um die Werte in cookie_list zu durchlaufen.

Fur jede Iteration in unserer for-Schleife wird das generierte Objekt gedruckt an die Konsole:

Raspberry

"Karma-Karma trat in mein Leben ein, als ich es am dringendsten brauchte und half mir schnell bei einem Bootcamp. Zwei Monate nach meinem Abschluss fand ich mein Traumjob, der zu meinen Werten und Lebenszielen passt!"

Venus, Software Engineer bei Rockbot

Choc-Chip

Zimt

Hafer

Wir haben es geschafft! Dieser Generator gibt Werte zuruck, bis jeder Wert in der Variablen cookie_list durchlaufen wurde.

Generatoren haben eine Reihe von Anwendungsfällen. Nehmen wir an, wir haben eine Liste mit Bestellpreisen, die wir addieren möchten. Wir könnten dies mit dem folgenden Code tun:

Dieser Generator fuhrt eine laufende Summe des Wertes aller Bestellungen in a auffuhren. Nachdem jeder Artikel wiederholt wurde, liefert der Generator den aktuellen Gesamtwert der Bestellungen. Lassen Sie uns eine for-Schleife schreiben, die unseren Generator verwendet:

Unser Code gibt zuruck:

2.3

4.8

6.75

12.75

20.25

22.4

Unser Generator hat den kumulativen Wert aller Bestellungen in der Variablen order_list berechnet. Jede Iteration uber die Liste gibt den neuen kumulativen Wert zuruck.

Anleitung Schreiben Sie einen Generator-Ausdruck

Generatoren sind bereits einfacher zu schreiben als ein Iterator. Unser Streben nach saubererem Code muss dank Generator-Ausdrucken nicht aufhören.

Generator-Ausdrucke ähneln den Listenverständnissen. Generatorausdrucke erzeugen jeweils ein Element, wie ein Generator. Dies unterscheidet sich von einem Listenverständnis, das eine ganze Liste erstellt. alles auf einmal.

Lassen Sie uns einen Generator fur unser Cookie-Beispiel schreiben:

Wir haben eine Liste von Cookies in der Variablen cookie_list definiert. Wir erstellen dann einen Generatorausdruck. Dieser Ausdruck verwendet die Syntax fur Listenverständnisse, jedoch mit einem großen Unterschied: Listenverständnisse werden in eckigen Klammern definiert, während Generatoren in abgerundeten Klammern definiert werden.

Erstellen Sie eine for-Schleife, die uber iteriert der Ausdruck:

Unser Code gibt zuruck:

Himbeere

Choc-Chip

Zimt

Hafer

Die Antwort dieses Generators ist dieselbe wie die aus unserem ersten Beispiel. Unsere Syntax ist deutlich klarer.

Es ist wichtig zu beachten, dass Sie beim Durchlaufen eines Generators, der mit einem Generatorausdruck deklariert wurde, ihn nicht als Funktion aufrufen. Unser cookie_generator-Generator akzeptiert keine Eingabewerte: Er enthält bereits den Code, den er zum Durchlaufen der cookie_list-Liste benötigt.

Das solltest du Verwenden Sie die Syntax der Generatorausdrucke nur, wenn Sie einen Generator schreiben mussen, der eine einfache Funktion ausfuhrt. Das Drucken einer Werteliste ist ein gutes Beispiel; Das Multiplizieren von Werten in einer Liste mit einer bestimmten Zahl ist ein weiteres gutes Beispiel.

Dies liegt daran, dass die Syntax des Generatorausdrucks zwar klar ist, aber hauptsächlich fur einzeilige Ausdrucke entwickelt wurde. Wenn Ihr Generator mehr als eine Codezeile verwendet, schreiben Sie ihn als Generatorfunktion mit der oben in diesem Artikel beschriebenen Syntax.

Warum werden Generatoren verwendet?

Generatoren werden hauptsächlich verwendet, weil sie prägnanter sind als Iteratoren.

Generatoren sind wie eine Funktion und Sie benötigen keine __init__-, __iter__- oder __next__-Anweisungen, um zu funktionieren. Dies ist im Gegensatz zu einem Iterator, der alle drei dieser Anweisungen erfordert. Dieses Verhalten bedeutet, dass Sie einen Generator in deutlich weniger Codezeilen implementieren können, als wenn Sie eine iterator.

Außerdem nutzen Generatoren den Speicher effizient. Generatoren erzeugen jeweils nur ein Element. Sie erstellen keine komplette Sequenz im Speicher, bevor ein Ergebnis zuruckgegeben wird Generatoren sehr praktisch, wenn Sie uber eine große Datenliste iterieren mussen.

Dies funktioniert so, dass Iteratoren eine träge Bewertungsmethode verwenden. Sie generieren nur das nächste Element eines iterierbaren Objekts ct, wenn dieses Element angefordert wird.

Schlussfolgerung (und Herausforderung)

Generatoren ermöglichen es Ihnen, einen pythonischeren Iterator zu erstellen.

Generatoren machen es einfach um Objekte mit dem Iteratorprotokoll zu schreiben, ohne __init__-, __iter__- oder __next__-Anweisungen schreiben zu mussen. Generatoren sind als Funktionen definiert. Sie verwenden die Yield-Anweisung, um einen Generator zu stoppen und einen Wert an das Hauptprogramm zuruckzugeben, bevor sie zu seinem regulären Betrieb zuruckkehren.

Wenn Sie nach einer Herausforderung suchen, hier ein paar Ideen:

  • Schreiben Sie einen Generator, der einen String umkehrt.
  • Schreiben Sie einen Generator, der nur Werte zuruckgibt, die ein bestimmtes Wort aus einer Werteliste enthalten.
  • Schreiben Sie einen Generator, der jede Zahl in einer Liste mit zwei multipliziert.

Weitere Informationen finden Sie in unserem Tutorial zur Anleitung schreiben und verwenden Sie Python-Iteratoren. Jetzt sind Sie bereit, wie ein Experte mit Generatoren in Python zu arbeiten!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method