【发布时间】: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
我正在改造一些旧的 Python 代码以添加 PyType 注释。我通过在每个函数的顶部添加打印语句来机械地执行此操作
def f(a, b):
print("type a:", type(a))
print("type b:", type(b))
并相应更新。
有什么可以帮助自动化这个过程的吗?
【问题讨论】:
标签: python types type-hinting
当然,有一些项目可以提供帮助。
MonkeyType tool 来获取运行时类型信息。这些作为存根文件输出,但您可以使用包含的工具将这些工具作为内联注释应用到源文件,或使用retype project 来执行相同操作。pyannotate;此工具可以生成 Python 2 类型的提示 cmets 或注释。这两个项目都不会产生完美的类型提示;总是以他们的输出为出发点,而不是权威的最终注释。引用MonkeyType自述文件:
使用 MonkeyType,很容易添加反映您在运行时使用的具体类型的注释,但这些注释可能并不总是与函数的全部预期功能相匹配。例如, add 能够处理比整数更多的类型。类似地,MonkeyType 可能会生成一个具体的 List 注释,其中抽象的 Sequence 或 Iterable 会更合适。 MonkeyType 的注释是一个信息丰富的初稿,由开发人员检查和更正。
但请阅读Instagram engineering blog post on MonkeyType;它有助于向 Instagram 代码库添加类型注释。
免责声明:MonkeyType 和 retype 都是 Facebook 同事的项目。我自己对这些工具没有任何意见。
【讨论】: