什么是打字。列表<~T>;[typing.Tuple[int]]在Python中的意思';什么是打字库?

什么是打字。列表<~T>;[typing.Tuple[int]]在Python中的意思';什么是打字库?,python,typing,Python,Typing,在玩Python的输入模块时,我遇到了一些奇怪的事情: >>> from typing import List, Tuple >>> List[Tuple[int]] typing.List<~T>[typing.Tuple[int]] >>从输入导入列表,元组 >>>列表[元组[int]] typing.List[typing.Tuple[int]] 这个类似Java的语法是什么?这是什么意思?让我们看看: typing.List<~T

在玩Python的
输入模块时,我遇到了一些奇怪的事情:

>>> from typing import List, Tuple
>>> List[Tuple[int]]
typing.List<~T>[typing.Tuple[int]]
>>从输入导入列表,元组
>>>列表[元组[int]]
typing.List[typing.Tuple[int]]
这个类似Java的语法是什么?这是什么意思?

让我们看看:

typing.List<~T>[typing.Tuple[int]]
typing.List[typing.Tuple[int]]
  • typing.List
    表示
    typing
    库中名为
    List
  • 表示此类型是泛型的,它是根据另一个类型T定义的
  • [typing.Tuple[int]
    表示类型T是类型
    Tuple[int]
  • 在自然语言中,您可以这样阅读定义:

    typing.List[typing.Tuple[int]]
    :一个int元组的标准列表


    这不是实际的Python语法,所以不要尝试在程序中使用它。也就是说,这就是他们选择表示泛型类型的类型参数的方式。在泛型类型的
    repr
    中,声明的类型参数在类似Java的
    尖括号中列出,每个类型参数前面都有一个
    +
    -
    ~
    ,具体取决于该参数是协变、逆变还是非协变

    typing.List
    接受一个名为
    T
    的非协变、非逆变类型参数,因此它在名称后获得一个

    您会注意到,
    typing.Tuple
    的名称后面没有任何
    内容
    Tuple
    是一个奇怪的特例,因为它采用了数量可变的类型参数。

    你说的“它从哪里来”是什么意思?
    List
    只是泛型类型的列表
    T
    ,基于
    ~
    既不表示共变量也不表示反变量。
    /
    /
    符号从3.6开始从python中消失。它现在只打印
    typing.List[typing.Tuple[int]]
    ,所以您看不到它的变化。我找不到与此相关的问题,否则我会要求将其带回:)