Python Glossary English

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Сообщить о неточности