在Python类型提示中使用类型库类与类型有什么好处?

时间:2017-12-06 21:10:28

标签: python type-hinting static-typing

我开始学习Python中的类型提示,以便于将来从Python移植到C代码。我想知道在类型提示中直接使用类型与使用类中定义的类之间有什么区别(如果有的话) typing模块。

例如,

之间的区别
def somefn(a: list[int]) -> tuple[str, int]:
    ...

from typing import List, Tuple

def somefn(a: List[int]) -> Tuple[str, int]:
    ...

似乎有些类UnionAnyCallableIterable会很有用,但是对于已作为关键字存在的数据类型的类的效用在python中我不清楚。

1 个答案:

答案 0 :(得分:2)

它可用于编写可以合法评估的注释;如果您尝试实际运行它,list[int]将会爆炸,而typing.List[int]会返回一个知道容器和内容类型的新泛型类型。这在type aliases的情况下尤为重要,其中在顶层定义了泛型的专用版本,然后在以下内容中重新用作注释:

Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
     ...

是合法的,而:

Vector = list[float]
def scale(scalar: float, vector: Vector) -> Vector:
     ...

在你的脸上爆炸。您需要注意的是,非容器/泛型类型通常不具有typing类型(例如Text之类的异常用于移植问题),因为类型别名只会将它们用作& #34;叶"类型,而不是根或分支类型。