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

问题描述 投票:0回答:1

假设我有一些通用功能:

def foo(*args):
    for arg in args:
        print(arg)

如果我想输入提示

*args
,根据PEP我只需要指定类型一arg。

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

T = typing.TypeVar('T')

def foo(*args: T):
    ...

def foo(*args: Any):
    ...

据我所知,

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

python types type-hinting typing type-annotation
1个回答
5
投票

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

foo(*args: T)
表示该函数可以接受任意数量的参数,并且参数可以是任何类型,但必须全部属于同一类型。

foo(*args: Any)
表示该函数可以采用任意数量的任何类型参数。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.