Python 3.5+Annotations & typingterm
Optional[X] / X | None
optional
Optional[X] means X | None. Since Python 3.10 you can write X | None directly. Used for values that may be absent.
Syntax
from typing import Optional
Optional[X] # эквивалентно X | None
# Python 3.10+: X | None
The usual beginner mix-up: Optional does not mean "you may omit the argument". It only says the value can be None; what makes a parameter optional is a default value, so def f(x: Optional[int]) still demands an argument. Also, mypy no longer adds Optional implicitly — x: int = None is an error these days, so spell out x: int | None = None.
Examples
from typing import Optional
def find(name: str) -> Optional[str]:
return name if name else None
print(find('Alice')) # → Alice
print(find('')) # → None
result: Optional[int] = None # → допустимо
# Python 3.10+
def greet(name: str | None = None) -> str:
return f'Hi, {name or "stranger"}'
print(greet()) # → Hi, stranger
See also
Open in the full glossarydocs.python.orgReport an inaccuracy