Generatory są dość specyficznym tworem, który do tej pory zaobserwowałem jedynie w Pythonie. Są one podobne do funkcji, jednakże nie są one tym samym co zwykła Pythonowa funkcja. Dobrym przykładem generatora, który jest nagminnie wykorzystywany w Pythonie jest range.
Żeby zrozumieć, jak działają generatory najlepiej jest rzucić okiem na przykład własnoręcznie utworzonego generatora:
import math
def c_sin(angle_begin = 0, angle_end = 90, step = 1):
s = math.sin(math.radians(angle_begin))
while angle_begin != angle_end:
yield s
angle_begin += steep
s = math.sin(math.radians(angle_begin))
sin_angle = list(c_sin(0,5))
print(sin_angle)
Słowo kluczowe yield (z angielskiego: krzyczeć) mówi nam, że generator wyrzuca pewną wartość, ale jego działanie nie kończy się na tym. Działanie generatora kończy się dopiero wtedy gdy (w tym przypadku) spełniony jest warunek angle_begin != angle_end.
Wynikiem działania powyższego kodu będzie wyświetlenie elementów listy, które zawierają wartości typu float będące sinusem kątów z zakresu podanego na wejście funkcji. Krok tego zakresu to domyślna wartość argumentu step generatora c_sin.