何时以及何时不使用 TypeVars?

When and when not to use TypeVars?

当使用 typing 模块编写类型提示时,我不确定什么时候应该使用 TypeVar 个实例。

例如

之间的实用"difference"
str_or_int = typing.TypeVar('str_or_int', str, int)

str_or_int = typing.Union[str, int]

在这样的提示中使用?

def foo(bar: str_or_int):
    pass
T = TypeVar('T', str, int)

def foo(bar: T) -> T:
    pass

这就是类型变量的使用方式。这意味着 bar 可以是 strint 并且 foo 将 return 与 bar 相同类型的值。你不会用 Union:

str_or_int = Union[str, int]

def foo(bar: str_or_int) -> str_or_int:
    pass

这只是意味着 bar 可以是 strintfoo 将 return 是 strintbar 的类型和 return 值之间没有联系。