3.4. Typing Generator

  • All Generators are Iterators

3.4.1. SetUp

  • Import from typing or collections.abc

  • collections.abc should be preferred

>>> from typing import Generator, Iterator
>>> from collections.abc import Iterator, Generator

3.4.2. Iterator

  • Iterator[yield_type]

>>> def run() -> Iterator:
...     yield 1
>>> def run() -> Iterator[int]:
...     yield 1

3.4.3. Generator

  • All Generators are Iterators

>>> def run() -> Generator:
...     yield 1

3.4.4. Generator Yield Type

  • Generator[yield_type, send_type, return_type]

>>> def run() -> Generator[int, None, None]:
...     yield 1

3.4.5. Generator Send Type

  • Generator[yield_type, send_type, return_type]

>>> def run() -> Generator[None, str, None]:
...     data = yield
...     print(data)

3.4.6. Generator Return Type

  • Generator[yield_type, send_type, return_type]

>>> def run() -> Generator[int, bool, str]:
...     yield 1         # int
...     data = yield    # (expected) bool
...     return 'done'   # str

3.4.7. Generator is Iterator

  • All Generators are Iterators

>>> def run() -> Iterator[int]:
...     yield 1

3.4.8. Further Reading