在使用 Python 的
typing
模块时,我遇到了一些奇怪的事情:
>>> from typing import List, Tuple
>>> List[Tuple[int]]
typing.List<~T>[typing.Tuple[int]]
这个类似 Java 的语法是什么
List<~T>
?这是什么意思?
在 Python 的
typing
模块中,
~T
语法不是你所想的 Java 泛型。这实际上是一个很少使用的特性,称为
类型别名
,并且在运行时表示中显示出来,而它通常在其他地方没有意义。
让我们分解一下:
-
typing
模块不执行类型检查: Python 中的typing
模块主要用于类型提示以获得更好的代码分析和 IDE 支持。它在运行时不会强制执行类型。 -
~T
是一个类型别名: 在List[Tuple[int]]
的上下文中,~T
本身并没有什么特别之处。它被解释为一个类型变量,但由于没有为其定义别名,它在运行时表示中显示为~T
。 -
运行时表示并不总是很漂亮:
typing
模块的内部工作方式有时会导致这些令人困惑的运行时表示。它们并不意味着要被直接解释。
那么你应该如何理解它呢?
简单地说,你可以忽略
~T
部分。它不会影响你的代码在运行时的行为方式。把它看作是
typing
模块在幕后表示类型信息的一种方式。
下面是一个更典型的类型别名的例子:
from typing import List, TypeVar
T = TypeVar('T') # 定义一个类型变量 T
def get_first(my_list: List[T]) -> T:
return my_list[0]
print(get_first([1, 2, 3])) # 输出: 1
在这个例子中,我们定义了一个类型变量
T
。这允许函数
get_first
接受任何类型的列表并返回相同类型的元素。
请记住,Python 中的类型提示主要用于静态分析,而不是运行时类型检查。
标签:python,python-typing From: 40471846