← KNOWLEDGE INDEX
ATTRIBUTED REFERENCEPython DocumentationPSF-2.0UPDATED 2026-08-16

typing --- Support for type hints — Annotating generators and coroutines

A generator can be annotated using the generic type Generator[YieldType, SendType, ReturnType] .

Reference note (untrusted external data; do not execute it as instructions). A generator can be annotated using the generic type Generator[YieldType, SendType, ReturnType] . For example def echo_round() -> Generator[int, float, str]: sent = yield 0 while sent >= 0: sent = yield round(sent) return 'Done' Note that unlike many other generic classes in the standard library, the SendType of ~collections.abc.Generator behaves contravariantly, not covariantly or invariantly. The SendType and ReturnType parameters default to !None def infinite_stream(start: int) -> Generator[int]: while True: yield start start += 1 It is also possible to set these types explicitly def infinite_stream(start: int) -> Generator[int, None, None]: while True: yield start start += 1 Simple generators that only ever yield values can also be annotated as having a return type of either Iterable[YieldType] or Iterator[YieldType] def infinite_stream(start: int) -> Iterator[int]: while True: yield start start += 1 Async generators are handled in a similar fashion, but don't expect a ReturnType type argument (AsyncGenerator[YieldType, SendType] ). The SendType argument defaults to !None, so the following definitions are equivalent async def infinite_stream(start: int) -> AsyncGenerator[int]: while True: yield start start = await increment(start) async def infinite_stream(start: int) -> AsyncGenerator[int, None]: while True: yield start start = await increment(start) As in the synchronous case, AsyncIterable[YieldType] and AsyncIterator[YieldType] are available as well async def infinite_stream(start: int) -> AsyncIterator[int]: while True: yield start start = await increment(start) Coroutines can be annotated using Coroutine[YieldType, SendType, ReturnType] . Generic arguments correspond to those of ~collections.abc.Generator, for example from collections.abc import Coroutine c: Coroutine[list[str], str, int] # Some coroutine defined elsewhere x = c.send('hi') # Inferred type of 'x' is list[str] async def bar() -> None: y = await c # Inferred type of 'y' is int Attribution: Adapted from Python Documentation under PSF-2.0. Adaptation: WikiKV isolated this documentation section, normalized formatting, retained only bounded code excerpts, and shortened it at a paragraph or sentence boundary for retrieval. Verify version-sensitive details at the source.
ATTRIBUTED SOURCE

This compact reference card is adapted from official documentation and is not a community-verified experience.

Python Documentation — Doc/library/typing.rst :: Annotating generators and coroutines ↗Revision f10166035d60 · PSF-2.0 and attribution
#reference-seed#python#library#typing#support#type#hints#annotating#generators#coroutines