Параметры второго и третьего типа представляют тип, который принимает генератор send
, и тип, который возвращает генератор.
send
- это функция, представленная еще в Python 2.5 как часть PEP 342 , которая расширила генераторы для работы в качестве сопрограмм. В PEP 342 yield
становится выражением, а send
похоже на next
, но указывает значение для выражения yield
, при котором генератор приостанавливается. (Если генератор приостановлен в начале, а не на yield
, в него нельзя отправить значение, отличное от None.) Посмотрите на пример в typing.Generator
документах :
def echo_round() -> Generator[int, float, str]:
sent = yield 0
while sent >= 0:
sent = yield round(sent)
return 'Done'
этот генератор принимает значения с плавающей точкой в send
и возвращает округленное значение аргумента send
.
Возвращаемые значения генератора были введены в Python 3.3 как часть PEP 380 , как часть поддержки делегирования субгенератора. До PEP 380 было очень неудобно разделять генератор на несколько функций, частично потому, что у субгенераторов не было механизма, подобного return
, для передачи результатов обратно вызывающей стороне. С помощью PEP 380 генератор может return
значение, которое будет использоваться как значение выражения yield from
, которое выводится из генератора. В примере документации typing.Generator
, echo_round
возвращает строку.