суббота, 26 апреля 2014 г.

Генераторы и Сопрограммы

Генератор, это очень похоже на итератор, только это функция. При вызове этой функции в цикле, она при каждом новом цикле выдает следующее значение. Пишется эта функция с использованием оператора yield

yield работает как return, с одной разницей, что между вызовами функций, все состояния и данные будут при следующем вызове функции такими, какими они были на момент предыдущего исполнения yield.

По сути это ключевое слово создает итератор, просто создание итератора упрощается за счет того, что методы __iter__() и next() создаются автоматически. При выходе из функции не по оператору yield автоматически генерируется StopIteration.

1 def power(start):
2     print "power is called the first time"
3     for i in xrange(start,start+5):
4         yield i*i
5     print "power is called the last time"
Результат:

1 >>> power(5)
2 power() is called the first time
3 4
4 9
5 16
6 25
7 36
8 power() is called the last time

Комментариев нет:

Отправить комментарий