【问题标题】:Automatically generating Python type annotations?自动生成 Python 类型注解?
【发布时间】:2018-10-29 04:44:32
【问题描述】:

我正在改造一些旧的 Python 代码以添加 PyType 注释。我通过在每个函数的顶部添加打印语句来机械地执行此操作

def f(a, b):
    print("type a:", type(a))
    print("type b:", type(b))

并相应更新。

有什么可以帮助自动化这个过程的吗?

【问题讨论】:

    标签: python types type-hinting


    【解决方案1】:

    当然,有一些项目可以提供帮助。

    • Instagram 开发了MonkeyType tool 来获取运行时类型信息。这些作为存根文件输出,但您可以使用包含的工具将这些工具作为内联注释应用到源文件,或使用retype project 来执行相同操作。
    • Dropbox 有一个类似的工具,叫做pyannotate;此工具可以生成 Python 2 类型的提示 cmets 或注释。

    这两个项目都不会产生完美的类型提示;总是以他们的输出为出发点,而不是权威的最终注释。引用MonkeyType自述文件:

    使用 MonkeyType,很容易添加反映您在运行时使用的具体类型的注释,但这些注释可能并不总是与函数的全部预期功能相匹配。例如, add 能够处理比整数更多的类型。类似地,MonkeyType 可能会生成一个具体的 List 注释,其中抽象的 Sequence 或 Iterable 会更合适。 MonkeyType 的注释是一个信息丰富的初稿,由开发人员检查和更正。

    但请阅读Instagram engineering blog post on MonkeyType;它有助于向 Instagram 代码库添加类型注释。

    免责声明:MonkeyType 和 retype 都是 Facebook 同事的项目。我自己对这些工具没有任何意见。

    【讨论】:

    • 这是完美的,并且很好地提醒了输出(就像我的打印语句中的)只是一个很好的起点。
    • 你觉得哪一个效果更好,MonkeyType 还是 pyannotate?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2014-09-05
    • 2022-11-03
    • 2011-07-18
    • 2016-12-06
    • 2012-03-31
    • 2020-07-01
    相关资源
    最近更新 更多