Python

Python Menu

Generatoren werden zum Erstellen von Iteratoren verwendet, allerdings mit einem anderen Ansatz. Generatoren sind einfache Funktionen, die eine iterierbare Menge von Elementen zurückgeben, eines nach dem anderen, auf eine spezielle Art und Weise.

Wenn eine Iteration über eine Menge von Elementen mit der for-Anweisung beginnt, wird der Generator ausgeführt. Sobald der Funktionscode des Generators eine "yield"-Anweisung erreicht, übergibt der Generator seine Ausführung zurück an die for-Schleife und gibt einen neuen Wert aus der Menge zurück. Die Generatorfunktion kann so viele Werte (möglicherweise unendlich viele) erzeugen, wie sie will, und jeden Wert der Reihe nach zurückgeben.

Hier ist ein einfaches Beispiel für eine Generatorfunktion, die 7 zufällige Ganzzahlen zurückgibt:

import random def lotto(): # gibt 6 Zahlen zwischen 1 und 40 zurück for i in range(6): yield random.randint(1, 40)
# gibt eine 7. Zahl zwischen 1 und 15 zurück yield random.randint(1,15) for zufällige_zahl in lotto(): print("Und die nächste Zahl lautet... %d!" %(zufällige_zahl))

Diese Funktion entscheidet selbst, wie sie die Zufallszahlen generiert, und führt die Yield-Anweisungen nacheinander aus, wobei sie zwischendurch pausiert, um die Ausführung wieder an die for-Hauptschleife zurückzugeben.

Übung

Schreibe eine Generatorfunktion, die die Fibonacci-Reihen zurückgibt. Diese werden mit der folgenden Formel berechnet: Die ersten beiden Zahlen der Reihe sind immer gleich 1, und jede nachfolgende Zahl, die zurückgegeben wird, ist die Summe der letzten beiden Zahlen. Tipp: Kannst du nur zwei Variablen in der Generatorfunktion verwenden? Beachte, dass Zuweisungen gleichzeitig durchgeführt werden können.

# fülle diese Funktion aus def fib(): pass # Dies ist eine Null-Anweisung, die bei der Ausführung nichts tut, nützlich als Platzhalter.
# Test-Code import types if type(fib()) == types.GeneratorType: print("Gut, die Funktion fib ist ein Generator.")
zähler = 0 for n in fib(): print(n) zähler += 1 if zähler == 10: break
# fülle diese Funktion aus def fib(): a, b = 1, 1 while 1: yield a a, b = b, a + b
# Test-Code import types if type(fib()) == types.GeneratorType: print("Gut, die Funktion fib ist ein Generator.")
zähler = 0 for n in fib(): print(n) zähler += 1 if zähler == 10: break
test_output_contains("Gut, die Funktion fib ist ein Generator.") success_msg("Hervorragend!")

Einführung

Python Basics

Python Advance

Data Science Python Tutorials

Python Eingebaute Funktionen