Add typing.Generator docs, by Michael Lee.

This commit is contained in:
Guido van Rossum 2016-08-05 12:56:09 -07:00
parent 69332c1a64
commit b858af61b9
1 changed files with 29 additions and 0 deletions

View File

@ -556,6 +556,35 @@ The module defines the following classes, functions and decorators:
.. class:: Generator(Iterator[T_co], Generic[T_co, T_contra, V_co])
A generator can be annotated by 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 generics in the typing module, the ``SendType``
of :class:`Generator` behaves contravariantly, not covariantly or
invariantly.
If your generator will only yield values, set the ``SendType`` and
``ReturnType`` to ``None``::
def infinite_stream(start: int) -> Generator[int, None, None]:
while True:
yield start
start += 1
Alternatively, annotate your generator as having a return type of
``Iterator[YieldType]``::
def infinite_stream(start: int) -> Iterator[int]:
while True:
yield start
start += 1
.. class:: io
Wrapper namespace for I/O stream types.