Форум сайта python.su
3
Пожалуйста, прокомментируйте, как это работает (#1, #2)
def coroutine(): # сопрогамма while True: yield (yield) corObj=coroutine() corObj.next() #1 print corObj.send(1) #2 corObj.next() print corObj.send(2) corObj.next() print corObj.send(3) corObj.close()
Офлайн
14
Генератор каждый раз возвращает то, что ему передали. Странный код, к слову.
Офлайн
173
Все подробно расписано в PEP 255 - Simple Generators
и в PEP 342 - Coroutines via Enhanced Generators
про send (в разделе Specification: Sending Values into Generators)
#1 - нужно чтобы иметь возможность начать отправлять генератору значения отличные от None
next() - тоже самое, что send(None)
#2 - Отправляет значение в генератор
Вот еще пример:
# -*- coding: utf-8 -*- def coroutine(): while True: a = (yield) or 12345 b = (yield) or 54321 yield (a + b) * 10 corObj=coroutine() print 'next()', corObj.next() print 'send(1)', corObj.send(1) # a = 1 print 'send(2)', corObj.send(2) # b = 2 и выведет результат 30 print 'next()', corObj.next() # None print 'next()', corObj.next() # None print 'next()', corObj.next() # 666660
Отредактировано reclosedev (Апрель 1, 2012 21:28:26)
Офлайн
3
Я просто эксперементирую с генераторами.
Меня интересует, как здесь работает метод corObj.next()
Сейчас понял. Спасибо!
Отредактировано vkopey (Апрель 1, 2012 21:32:43)
Офлайн