Generatory

Stronę tą wyświetlono już: 277 razy

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:

Listing 1
  1. import math
  2. def c_sin(angle_begin = 0, angle_end = 90, step = 1):
  3. s = math.sin(math.radians(angle_begin))
  4. while angle_begin != angle_end:
  5. yield s
  6. angle_begin += steep
  7. s = math.sin(math.radians(angle_begin))
  8. sin_angle = list(c_sin(0,5))
  9. 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.

[0.0, 0.01745240643728351, 0.03489949670250097, 0.052335956242943835, 0.0697564737441253]

Komentarze