Найти - Пользователи
Полная версия: Сопрограммы
Начало » Python для новичков » Сопрограммы
1
vkopey
Пожалуйста, прокомментируйте, как это работает (#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()
Андрей Светлов

Генератор каждый раз возвращает то, что ему передали. Странный код, к слову.

reclosedev
Все подробно расписано в 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
vkopey
Я просто эксперементирую с генераторами.
Меня интересует, как здесь работает метод corObj.next()

Сейчас понял. Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB