代码之家  ›  专栏  ›  技术社区  ›  Ian Kent

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

  •  5
  • Ian Kent  · 技术社区  · 7 年前

    我开始学习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]:
        ...
    

    好像有些课 Union , Any , Callable Iterable 这会很有用,但对于python中已经作为关键字存在的数据类型,类的实用性我不清楚。

    1 回复  |  直到 7 年前
        1
  •  14
  •   ShadowRanger    4 年前

    它有助于编写可以合法评估的注释; 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 因为类型别名只会将它们用作“叶”类型,而不是根或分支类型。

    更新: 截至3.9, the standard collections can serve as type hints ,所以 打字 类型不是绝对必要的;如果愿意,您可以继续使用它们(对于必须在3.9之前的Python上运行的代码来说是必要的),但如果您可以依赖3.9+,则不必这样做。