TypeVar('T') 和 Any 之间的区别

5 python types typing type-hinting type-annotation

假设我有一些通用功能:

def foo(*args):
    for arg in args:
        print(arg)
Run Code Online (Sandbox Code Playgroud)

如果我想输入hint *args,根据PEP,我只需要指定类型一arg。

如果参数可以是任何类型怎么办?有什么区别:

T = typing.TypeVar('T')

def foo(*args: T):
    ...
Run Code Online (Sandbox Code Playgroud)

def foo(*args: Any):
    ...
Run Code Online (Sandbox Code Playgroud)

据我所知,TypeVar('T')等于“任何类型”,但是当变量参数具有多种类型时,这是否适用?

ruo*_*ola 6

人们可能会认为区别在于:

foo(*args: T)意味着该函数可以接受任意数量的参数,并且参数可以是任何类型,但必须都是相同的类型。

foo(*args: Any)意味着该函数可以接受任意数量的任意类型的参数。

但实际上并非如此: https: //github.com/python/mypy/issues/6559#issuecomment-473864640

实际上,这两个定义之间没有区别