Python 3.5+Аннотации и typingпонятие
Optional[X] / X | None
опциональный
Optional[X] означает X | None. С Python 3.10+ можно писать X | None напрямую. Применяется для значений, которые могут отсутствовать.
Синтаксис
from typing import Optional
Optional[X] # эквивалентно X | None
# Python 3.10+: X | None
Главная путаница новичков: Optional не значит «аргумент можно не передавать». Он говорит лишь о том, что значением бывает None, а необязательным параметр делает значение по умолчанию — def f(x: Optional[int]) по-прежнему требует аргумент. И mypy давно не дописывает Optional сам: x: int = None теперь ошибка, пишите x: int | None = None.
Примеры
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
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности