Эта функция предназначена для записи сопрограмм
def coroutine():
for i in range(1, 10):
print("From generator {}".format((yield i)))
c = coroutine()
c.send(None)
try:
while True:
print("From user {}".format(c.send(1)))
except StopIteration: pass
prints
From generator 1
From user 2
From generator 1
From user 3
From generator 1
From user 4
...
Посмотрите, как управление передается взад и вперед? Это сопрограммы.
Подумайте об этом, используя генератор и не отправляйте, это улица с односторонним движением
========== yield ========
Generator | ------------> | User |
========== ========
] Но при отправке это становится двухсторонней улицей
========== yield ========
Generator | ------------> | User |
========== <------------ ========
send
, которая открывает дверь пользователю, настраивающему поведение генераторов на лету , и генератор, отвечающий пользователю .