Метод send() позволяет установить двусторонний обмен данными с генератором — одновременно возобновить его выполнение и передать значение обратно в него. Это значение становится результатом выражения yield внутри генератора.
yield, вызов send(value) возобновляет выполнениеyield внутри генератораyield, возвращая это значение вызывающему кодуПеред использованием send() генератор должен быть инициализирован путем вызова next() или send(None). Это продвигает его до первого оператора yield, подготавливая к приему значений.
def accumulator():
total = 0
while True:
value = yield total # результат send() захватывается здесь
total += value
gen = accumulator()
next(gen) # Инициализация: переход к первому yield
gen.send(10) # Отправляет 10 в генератор, возвращает 10
gen.send(5) # Отправляет 5 в генератор, возвращает 15
next()| Метод | Поведение |
|---|---|
next(gen) | Возобновляет генератор, неявно отправляет None |
gen.send(value) | Возобновляет генератор, отправляет явное значение |
send() особенно полезен для:
Метод send() возобновляет выполнение генератора и передает значение, которое становится результатом текущего выражения yield, приостановленного в генераторе.
Новый — ещё не проверен сообществом
Вы