Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

Generatoren


Generatoren sind sehr einfach zu implementieren, aber etwas schwierig zu verstehen.

Generatoren werden verwendet, um Iteratoren zu erstellen, jedoch mit einem anderen Ansatz. Generatoren sind einfache Funktionen, die auf spezielle Weise ein iterierbares Set von Elementen einen nach dem anderen zurückgeben.

Wenn eine Iteration über ein Set von Elementen mit dem For-Befehl beginnt, wird der Generator ausgeführt. Sobald der Code der Generatorfunktion eine "yield"-Anweisung erreicht, gibt der Generator seine Ausführung zurück an die For-Schleife und liefert einen neuen Wert aus dem Set zurück. Die Generatorfunktion kann so viele Werte generieren (möglicherweise unendlich viele), wie sie möchte, und gibt jeden nacheinander zurück.

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

  import random

  def lottery():
      # returns 6 numbers between 1 and 40
      for i in range(6):
          yield random.randint(1, 40)

      # returns a 7th number between 1 and 15
      yield random.randint(1, 15)

  for random_number in lottery():
         print("And the next number is... %d!" %(random_number))

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

Übung

Schreiben Sie eine Generatorfunktion, die die Fibonacci-Reihe zurückgibt. Sie wird mit der folgenden Formel berechnet: Die ersten beiden Zahlen der Reihe sind immer gleich 1, und jede der darauf folgenden Zahlen ist die Summe der letzten beiden Zahlen. Tipp: Können Sie in der Generatorfunktion nur zwei Variablen verwenden? Denken Sie daran, dass Zuweisungen gleichzeitig durchgeführt werden können. Der Code

a = 1
b = 2
a, b = b, a
print(a, b)

wird gleichzeitig die Werte von a und b tauschen.

# fill in this function def fib(): pass #this is a null statement which does nothing when executed, useful as a placeholder. # testing code import types if type(fib()) == types.GeneratorType: print("Good, The fib function is a generator.") counter = 0 for n in fib(): print(n) counter += 1 if counter == 10: break # fill in this function def fib(): a, b = 1, 1 while 1: yield a a, b = b, a + b # testing code import types if type(fib()) == types.GeneratorType: print("Good, The fib function is a generator.") counter = 0 for n in fib(): print(n) counter += 1 if counter == 10: break test_output_contains("Good, The fib function is a generator.") success_msg('Good work!')

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Next Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy