Generatory

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4096 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:

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.

[0.0, 0.01745240643728351, 0.03489949670250097, 0.052335956242943835, 0.0697564737441253]
Propozycje książek