typing.List<~T>[typing.Tuple[int]] 在 Python 的打字库中是什么意思?
What does typing.List<~T>[typing.Tuple[int]] mean in Python's typing lib?
在玩 Python 的 typing
模块时,我遇到了一些奇怪的事情:
>>> from typing import List, Tuple
>>> List[Tuple[int]]
typing.List<~T>[typing.Tuple[int]]
这是什么 Java-like 语法 List<~T>
?这是什么意思?
让我们看看:
typing.List<~T>[typing.Tuple[int]]
typing.List
表示 来自 typing
库的类型,名为 List
<~T>
表示这个类型是通用的,它是根据另一个类型T 定义的
[typing.Tuple[int]]
表示type T是Tuple[int]
. 类型
在自然语言中,您可以这样阅读定义:
typing.List<~T>[typing.Tuple[int]]
: a standard List of one-int tuples
这不是实际的 Python 语法,所以不要尝试在程序中使用它。也就是说,这就是他们选择表示泛型类型的类型参数的方式。在泛型类型的 repr
中,声明的类型参数列在类似 Java 的 <>
尖括号中,带有 +
、-
或 ~
在每个类型参数之前取决于该参数是协变的、逆变的还是两者都不是。
typing.List
接受一个名为 T
的非协变、非逆变类型参数,因此它在名称后得到一个 <~T>
。
您会注意到 typing.Tuple
名称后没有任何 <>
内容。 Tuple
是一个奇怪的特例,因为它需要可变数量的类型参数。
在玩 Python 的 typing
模块时,我遇到了一些奇怪的事情:
>>> from typing import List, Tuple
>>> List[Tuple[int]]
typing.List<~T>[typing.Tuple[int]]
这是什么 Java-like 语法 List<~T>
?这是什么意思?
让我们看看:
typing.List<~T>[typing.Tuple[int]]
typing.List
表示 来自typing
库的类型,名为List
<~T>
表示这个类型是通用的,它是根据另一个类型T 定义的
[typing.Tuple[int]]
表示type T是Tuple[int]
. 类型
在自然语言中,您可以这样阅读定义:
typing.List<~T>[typing.Tuple[int]]
: a standard List of one-int tuples
这不是实际的 Python 语法,所以不要尝试在程序中使用它。也就是说,这就是他们选择表示泛型类型的类型参数的方式。在泛型类型的 repr
中,声明的类型参数列在类似 Java 的 <>
尖括号中,带有 +
、-
或 ~
在每个类型参数之前取决于该参数是协变的、逆变的还是两者都不是。
typing.List
接受一个名为 T
的非协变、非逆变类型参数,因此它在名称后得到一个 <~T>
。
您会注意到 typing.Tuple
名称后没有任何 <>
内容。 Tuple
是一个奇怪的特例,因为它需要可变数量的类型参数。