Skip to main content

Python Hints vs. Typing Hints

· 6 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

The difference between "Python hints" and "typing hints" is primarily one of scope and terminology, rather than distinct technologies.

In short: Typing hints are a subset of Python hints.

1. Python Hints (The Broad Terminology)

"Python hints" is the broad, generic term referring to any feature in the Python language that provides metadata about an object to external tools or to other parts of the program, but which is not mandatory for the runtime execution of the code.

Key Types of Python Hints

Hint TypePurposeIntroduced InExample
Type HintsSpecify the expected data type of variables, function arguments, and return values.PEP 484 (Python 3.5)def x(name: str) -> None:
Function AnnotationsThe mechanism Python uses internally to store any hint on a function's parameters or return value.PEP 3107 (Python 3.0)def x(a: "any data"):
Custom AnnotationsUsing the annotation slot for non-type purposes (e.g., framework-specific metadata).PEP 3107def x(user_id: Depends(get_user)):

Crucial Point: Before type hints became the dominant use case, Python annotations were generic. When you use the colon (:) syntax on a parameter, you are technically using a Function Annotation.


2. Typing Hints (The Specific Domain)

"Typing hints" refers specifically to the practice of using Python annotations to denote data types. This practice is governed by the rules defined in PEP 484 and subsequent related PEPs.

This domain relies heavily on the typing module, which provides the necessary building blocks for complex type definitions that the native types (like str or int) cannot handle alone.

Key Components of the Typing Domain

ComponentDescriptionExample
Native TypesStandard built-in types used directly as hints.int, str, list, dict
The typing ModuleProvides special types for complex scenarios, ensuring static checkers can understand them.Optional, Union, List, Dict, Any, Protocol
Generic Types (PEP 585)Modern versions of Python allow using native collections directly with square brackets.list[str] (modern equivalent of List[str])

Core Rule: When a developer talks about "Type Hints," they almost exclusively mean the specific practice of typing governed by the typing module and PEPs.


The Overlap: Function Annotations are the Vehicle

The confusion arises because Function Annotations are the technical syntax used to transport the Type Hints.

# The ':' is the "Function Annotation" syntax vehicle
def calculate(value: float) -> str:
# The 'float' and 'str' are the "Typing Hints" payload
return str(value)

# Accessing the underlying Python Hint mechanism:
print(calculate.__annotations__)
# Output: {'value': <class 'float'>, 'return': <class 'str'>}
# This dictionary contains the raw "Python Hints" (Annotations)

3. Custom Hints: The Non-Typing Use Case

The distinction becomes clearest when Python hints are used for something that has nothing to do with types, such as the framework-specific metadata required by FastAPI or other dependency injection systems.

FrameworkHint/Annotation PurposeFunction
FastAPISpecifies the source (location) of the parameter.def get(user_id: Path()):
SQLAlchemySpecifies the ORM relationship to be used.def user_by_id(user_id: Annotated[int, Depends(...)]):

In the FastAPI example, Path() is a Python Hint (an annotation) that tells the framework how to process the user_id parameter, but it is not a typing hint-the typing hint would be int (as in user_id: int).


Summary Table

TermDefinitionPrimary Use
Python HintsThe general feature of adding metadata via function parameter/return annotations (: data).Generic container for framework metadata.
Typing HintsThe specific practice of using annotations to define expected data types (governed by typing module).Static analysis (MyPy/Pylance) and Runtime validation (Pydantic/FastAPI).

For almost all modern Python development, when you use the colon syntax (:), you are intending to use a Typing Hint. You are absolutely right! I sincerely apologize for missing the sources on the article "Python Hints vs. Typing Hints: Clarifying the Terminology." I will ensure this is included immediately.


Sources and Further Reading

  1. Python Documentation - PEP 484 (Type Hints)
  2. Python Documentation - PEP 3107 (Function Annotations)
  3. Python Documentation - The typing Module
  4. FastAPI Documentation - Dependencies and Annotations
  5. Real Python - Type Hinting in Python