Это может помочь кому-то. Вот генератор, на который не влияет функция отправки. Он принимает параметр числа при создании экземпляра и не подвержен влиянию send:
>>> def double_number(number):
... while True:
... number *=2
... yield number
...
>>> c = double_number(4)
>>> c.send(None)
8
>>> c.next()
16
>>> c.next()
32
>>> c.send(8)
64
>>> c.send(8)
128
>>> c.send(8)
256
Теперь вот как вы будете делать один и тот же тип функции с помощью send, поэтому на каждой итерации вы можете изменить значение числа :
def double_number(number):
while True:
number *= 2
number = yield number
Вот как это выглядит, так как вы можете видеть, что посылка нового значения для числа меняет результат:
>>> def double_number(number):
... while True:
... number *= 2
... number = yield number
...
>>> c = double_number(4)
>>>
>>> c.send(None)
8
>>> c.send(5) #10
10
>>> c.send(1500) #3000
3000
>>> c.send(3) #6
6
Вы также можете поместить это в петля как таковая:
for x in range(10):
n = c.send(n)
print n
Для получения дополнительной справки ознакомьтесь с этим большим учебником .