Python 何时以及何时不使用TypeVars?

Python 何时以及何时不使用TypeVars?,python,type-hinting,typing,Python,Type Hinting,Typing,当使用键入模块编写类型提示时,我不确定何时何地应该使用TypeVar实例 例如,两者的实际“区别”是什么 及 在这样的提示中使用 def foo(bar: str_or_int): pass 这就是typevars的使用方式。这意味着bar可以是str或int,foo将返回与bar相同类型的值。使用联合体将无法实现这一点: str_or_int = Union[str, int] def foo(bar: str_or_int) -> str_or_int: pass

当使用
键入
模块编写类型提示时,我不确定何时何地应该使用
TypeVar
实例

例如,两者的实际“区别”是什么

在这样的提示中使用

def foo(bar: str_or_int):
    pass
这就是typevars的使用方式。这意味着
bar
可以是
str
int
foo
将返回与
bar
相同类型的值。使用
联合体将无法实现这一点:

str_or_int = Union[str, int]

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

这只是意味着
bar
可以是
str
int
,而
foo
将返回
str
int
,在
bar
的类型和返回值之间没有联系。

谢谢!在这种差异无关紧要的情况下(例如我的OP中的
foo
),首选的类是什么?使用
TypeVar
,您总是在建立连接。它是类型系统中的变量名。不要使用它,除非这是你想要的,否则你可能会看到意想不到的副作用。
def foo(bar: str_or_int):
    pass
T = TypeVar('T', str, int)

def foo(bar: T) -> T:
    pass
str_or_int = Union[str, int]

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