Аннотация typing.Unpack
(добавлена в Python 3.11) представляет собой оператор ввода, который концептуально помечает объект как распакованный.
Например, использование оператора распаковки *
для кортежа переменного типа typing.TypeVarTuple
эквивалентно использованию аннотации Unpack
для пометки кортежа переменной типа как распакованного:
from typing import Unpack, TypeVarTuple Ts = TypeVarTuple('Ts') tup: tuple[*Ts] # делает эффективнее: tup: tuple[Unpack[Ts]]
На самом деле, typing.Unpack
можно использовать как синоним *
в контексте типов. Можно увидеть явное использование Unpack
в более старых версиях Python, где *
в определенных местах нельзя было использовать:
# В более старых версиях Python3, `TypeVarTuple` и `Unpack` # находятся в пакете backports `typing_extensions`. from typing_extensions import TypeVarTuple, Unpack Ts = TypeVarTuple('Ts') # Синтаксическая ошибка в Python <= 3.10! tup: tuple[*Ts] # Семантически эквивалентный и обратно совместимый tup: tuple[Unpack[Ts]]
Новое в Python 3.11.