【问题标题】:Possible to enforce type hints?可以强制执行类型提示吗?
【发布时间】:2020-09-10 22:30:11
【问题描述】:

在 python 中使用“类型提示”符号有什么好处吗?

import sys
def parse(arg_line: int) -> str:
    print (arg_line) # passing a string, returning None

if __name__ == '__main__':
    parse(' '.join(sys.argv[1:]))

在我看来,它似乎使语法复杂化而没有提供任何实际好处(可能在开发环境中之外)。基于此:

  • python 是否有计划在语言本身中包含 type 约束?
  • 拥有“类型提示”有什么好处?难道我不能轻松地将其放入文档字符串或其他内容中吗?

据我所知,我在 python 代码库本身中也看不到这么多——大多数类型都是手动强制执行的,例如:argparse.py 和我在https://github.com/python/cpython/blob/3.7/Lib/ 中查看的任何其他文件。

【问题讨论】:

  • Python 不是静态类型语言。如果你想要一种静态类型的语言,你需要使用 Python 以外的东西。
  • “是否有任何计划让 python 在语言本身中包含类型约束” 没有。目标是标准化人们注释函数签名的方式。主要目的是促进各种事物的创建,无论是静态还是运行时类型检查。但从来没有任何计划或愿望在语言本身中强制执行这一点。你可以阅读相关的PEP 484PEP 3107
  • 注意,mypy 是 Python 的事实上的“官方”静态类型检查器。事实上,Guido 目前正在研究它。
  • 我们希望您在发布问题之前进行适当的研究。请使用您从查找类型提示的用途中学到的知识更新问题。

标签: python types


【解决方案1】:

python 是否有计划在语言本身中包含类型约束?

几乎肯定不会,而且绝对不会在下一个主要版本之前。

拥有“类型提示”有什么好处?难道我不能轻松地将其放入文档字符串或其他内容中吗?

在我的脑海中,考虑以下几点:

  • 可以使用mypy 等工具验证类型提示。
  • IDE 和其他工具可以使用类型提示来提供提示和技巧。例如,当您调用一个函数并且刚刚编写了foo( 时,IDE 可以获取类型提示并在附近显示一个显示foo(x: int, y: List[int]) 的框。作为开发人员,您的优势在于您拥有正是您需要向您公开的信息,而不必修改整个文档字符串。
  • functools.singledispatch 之类的模块或multipledispatch 之类的外部库可以使用类型提示来添加其他与类型相关的功能(在这种情况下,根据名称和类型来调度函数调用,而不仅仅是名称)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2021-11-22
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2017-05-19
    • 2011-03-21
    • 2023-01-25
    相关资源
    最近更新 更多