Python 3.5+Аннотации и typingпонятие
Union[X, Y] / X | Y
объединение
Union[X, Y] — значение может быть типа X или Y. С Python 3.10+ поддерживается сокращённая запись X | Y.
Синтаксис
from typing import Union
Union[int, str] # int или str
# Python 3.10+: int | str
Классическая путаница: Optional[X] (то же самое, что X | None) говорит только о том, что значением может быть None, и никак не связан с необязательностью аргумента — за неё отвечает значение по умолчанию. Аннотация сама ничего не проверяет: анализатор просто потребует сузить тип, например через isinstance, прежде чем вы вызовете метод, который есть лишь у одной из веток. Запись X | Y работает в аннотациях и в isinstance с Python 3.10; в более старых версиях нужен Union из typing.
Примеры
from typing import Union
def double(x: Union[int, float]) -> Union[int, float]:
return x * 2
print(double(3)) # → 6
print(double(1.5)) # → 3.0
# Python 3.10+
def parse(val: int | str) -> str:
return str(val)
print(parse(42)) # → '42'
print(parse('hi')) # → 'hi'
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности