Как отобразить или вложить генераторы функций Python 2.7?

Если у меня есть очень простой (хотя, возможно, очень сложный) генератор функций в Python 2.7, вот так:

def accumulator():
    x = yield 0
    while True:
        x += yield x

Который можно использовать, например так:

>>> a = accumulator()
>>> a.send(None)
0
>>> a.send(1)
1
>>> a.send(2)
3
>>> a.send(3)
6

Какой будет простая оболочка для другого генератора функций, который выдает тот же результат, кроме умноженного на 2? Вышеупомянутый генератор функций прост, но, пожалуйста, предположите, что он слишком сложен для копирования-вставки. Я пытаюсь что-то вроде:

def doubler():
    a = accumulator()
    a.send(None)
    y = yield 0
    while True:
        y = 2 * a.send(yield y)

Или, воображая что-то попроще:

def doubler():
    a = accumulator()
    a.send = lambda v: 2 * super(self).send(v)
    return a

И то, и другое ужасно сломано, поэтому я не буду рассказывать о синтаксических ошибках, но это может проиллюстрировать то, что я пытаюсь сделать.

В идеале я хотел бы получить что-то вроде:

>>> d = doubler()
>>> d.send(None)
0
>>> d.send(1)
2
>>> d.send(2)
6
>>> d.send(3)
12

Результаты такие же, как и в оригинале, за исключением удвоения.

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

У второго генератора в конечном итоге будет другой входной поток, поэтому я не могу просто использовать результат первого генератора и удвоить его. Мне нужен второй независимый генератор, оборачивающий первый.

Входной поток является неопределенным, так что невозможно сформировать всю последовательность и затем преобразовать.

Кажется, я хочу отобразить или вложить эти генераторы функций, но я не уверен в подходящем жаргоне, и поэтому я нигде не в Google.

Ответы на вопрос(4)

Ваш ответ на вопрос