From 38962a6fe2e98e442f3fd586e4fd3d5f568b74fd Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sat, 4 Feb 2017 09:18:11 +0300 Subject: [PATCH] Issue #29198: Document typing.AsyncGenerator Patch by Jelle Zijlstra. --- Doc/library/typing.rst | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index f89d886cd7c..aaa43e4a444 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -670,6 +670,39 @@ The module defines the following classes, functions and decorators: yield start start += 1 +.. class:: AsyncGenerator(AsyncIterator[T_co], Generic[T_co, T_contra]) + + An async generator can be annotated by the generic type + ``AsyncGenerator[YieldType, SendType]``. For example:: + + async def echo_round() -> AsyncGenerator[int, float]: + sent = yield 0 + while sent >= 0.0: + rounded = await round(sent) + sent = yield rounded + + Unlike normal generators, async generators cannot return a value, so there + is no ``ReturnType`` type parameter. As with :class:`Generator`, the + ``SendType`` behaves contravariantly. + + If your generator will only yield values, set the ``SendType`` to + ``None``:: + + async def infinite_stream(start: int) -> AsyncGenerator[int, None]: + while True: + yield start + start = await increment(start) + + Alternatively, annotate your generator as having a return type of + either ``AsyncIterable[YieldType]`` or ``AsyncIterator[YieldType]``:: + + async def infinite_stream(start: int) -> AsyncIterator[int]: + while True: + yield start + start = await increment(start) + + .. versionadded:: 3.5.4 + .. class:: Text ``Text`` is an alias for ``str``. It is provided to supply a forward