Как получить значение в Python генераторе, посылаемое через метод send()
Python
Middle
Т-Банк
Как получить значение в Python генераторе, посылаемое через метод send()
Ответы
Генераторы в Python могут не только выдавать значения через `yield`, но и получать их через метод `send()`. Для этого нужно использовать `yield` как выражение, присваивая его результат переменной.
Пример:
```
def my_generator():
while True:
received = yield # Получаем значение через send()
print(f"Received: {received}")
gen = my_generator()
next(gen) # Инициализация генератора (до первого yield)
gen.send("Hello") # Отправляем значение в генератор
```
**Нюансы:**
- Перед `send()` обязательно вызовите `next()` или `send(None)`, чтобы генератор дошёл до первого `yield`.
- Если генератор завершился, `send()` вызовет `StopIteration`.
- `send()` также возвращает следующее значение генератора (если есть `yield` с возвратом).
Пример с возвратом значения:
```
def echo():
while True:
val = yield "Echo: "
print(val)
g = echo()
next(g)
print(g.send("Hi")) # Выведет "Hi" и вернёт "Echo: "
```