【问题标题】:Are there advantages of Python3 type hints over Python2?Python3 类型提示比 Python2 有优势吗?
【发布时间】:2022-01-17 04:55:58
【问题描述】:

据我了解,Python2 的类型提示约定类似于:

def geo_series(r, n) # type: (float, int) -> float
  return (1-r**n)/(1-r)

这已被 Python3 的系统所取代,如下所示:

def geo_series(r: float, n: int) -> float:
  return (1-r**n)/(1-r)

我的问题是:Python3 系统比 Python2 系统有什么优势?在我看来,它们包含相同的信息。由于无论如何类型检查都是由外部工具完成的,所以我认为将类型提示放在注释中并没有什么重大缺点。

我错过了什么吗?我最好的猜测是,在某些情况下,您可以创建一些古怪的类型,从而使 python3 类型检查比等效的 python2 提供更多信息?

【问题讨论】:

  • 提示更接近变量,这使得它们更容易读写。
  • # type: (float, int) -> float 是一个注释,可能会或可能不会被 IDE 更具体地解释。类型注释是代码的一部分。
  • 注解可以在运行时被any代码检索。注释通常会被删除,因此只有实际读取 .py 文件的代码才能看到。

标签: python python-3.x python-2.7 type-hinting


【解决方案1】:

正如 Patrick 在 cmets 中提到的,类型注释是代码的一部分,这意味着可以通过编程方式访问它们。例如,在您的 python 3 示例中,您可以使用

>>> geo_series.__annotations__
{'r': float, 'n': int, 'return': float}

如果您想实现它,这种编程访问使动态类型检查函数成为可能。

在代码中使用的注释示例是 dataclasses module。数据类中的字段是根据它是否具有类型注释来检测的,只有当注释是代码的一部分而不是注释时才有可能。

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 2019-11-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多