single
Unendliche Generatoren
Swipe um das Menü anzuzeigen
Erinnerung: yield pausiert einen Generator und setzt ihn beim nächsten Aufruf von next() fort. Bisher hatten die gezeigten Generatoren einen klaren Endpunkt. Besonders leistungsfähig werden Generatoren jedoch in Kombination mit einer Endlosschleife – sie erzeugen unbegrenzt Werte, ohne diese im Speicher zu halten.
Unendliche Generatoren mit while True
Die Verwendung einer while True-Schleife innerhalb eines Generators erzeugt eine unendliche Sequenz – etwas, das als Liste nicht speicherbar wäre. Der Generator liefert jeweils nur dann den nächsten Wert, wenn next() aufgerufen wird:
1234567891011def counter(): count = 1 while True: # Runs forever yield count # Return current value and pause count += 1 # Resume from here on the next call gen = counter() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3
Egal wie oft Sie next() aufrufen, der Generator hat immer einen neuen Wert bereit – er läuft nie voraus und speichert keine Werte im Speicher.
Steuerung eines unendlichen Generators
Da der Generator unendlich läuft, muss gesteuert werden, wie viele Werte abgerufen werden. Die gebräuchlichste Methode ist die Verwendung einer for-Schleife mit range():
12345678910def counter(): count = 1 while True: yield count count += 1 gen = counter() for _ in range(5): print(next(gen)) # 1, 2, 3, 4, 5
Niemals mit einer einfachen for-Schleife ohne Abbruchbedingung über einen unendlichen Generator iterieren – dies führt zu einer Endlosschleife und kann das Programm zum Absturz bringen.
Wischen, um mit dem Codieren zu beginnen
Erzeugen von eindeutigen Benutzer-IDs mithilfe einer unendlichen Generatorfunktion. Die Funktion id_generator() soll fortlaufend Bezeichner wie "ID_1", "ID_2" usw. erzeugen.
- Initialisierung der Variablen
countmit dem Wert 1, da die Bezeichner bei 1 beginnen. - Verwendung einer unendlichen
while-Schleife zur fortlaufenden Generierung von Bezeichnern. - Einsatz von
yield, um den aktuellen Bezeichner im Formatf"ID_{count}"zurückzugeben. - Inkrementierung von
countum 1 nach jeder Iteration. - Initialisierung des Generatorobjekts
id_gendurch Aufruf vonid_generator().
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen