Skip to main content

Python Type Hints

Satellite · Functions

Type Hints

PEP 484 introduced optional typing to Python. Learn the basics so your functions communicate intent clearly and static analyzers can help.

Functions​

from collections.abc import Sequence

def find_user(user_id: str, users: Sequence[dict]) -> dict | None:
...
  • Parameters and return values use colon and arrow syntax.
  • Since Python 3.9, use built-in generics directly: list[int], dict[str, int], tuple[int, ...].
  • Use T | None (Python 3.10+) to represent nullable returns; typing.Optional[T] is the legacy spelling.
  • For abstract container types, import from collections.abc (Sequence, Iterable, Mapping).

Typing essentials​

HelperPurpose
list[T], dict[str, int]Generic collections (built-ins since 3.9; typing.List is legacy)
A | B or Union[A, B]Multiple allowed types
Literal[...]Exact value constraints
TypedDict, NamedTuple, ProtocolStructured types
Callable[[ArgTypes], ReturnType]Function signatures (collections.abc.Callable)

Tooling​

  • Run mypy, pyright, or ruff check --select=ANN to verify annotations.
  • Use typing.TYPE_CHECKING to guard import-heavy type-only dependencies.

Next up in your learning path