result = yield from generator()
не легко заменить, это способ получения возвращаемого значения генератора
см. https://www.python.org/dev/peps/pep-0380/#proposal
, чтобы имитировать немного происходящегобез использования yield from мы должны изменить оба генератора
def accumlate():
# context
accumlator = 0
while True:
next = yield
if next is None:
raise StopIteration(accumlator)
accumlator += next
def gather(tallies):
internal_acc = accumlate()
internal_acc.send(None)
while True:
try:
number_to_add = yield
internal_acc.send(number_to_add)
except StopIteration as e:
internal_acc = accumlate()
internal_acc.send(None)
tallies.append(e.value)
accumlate
больше не возвращается, но повышается и gather
должна пытаться, кроме этого повышения,
после internal_acc
исчерпан, новый создается в исключении
есть что-то большее, как видно в pep0380, но в основном возвращение генератора - это повышение, а выход из - это компактный улов для этого