自动生成Python类型注释?

时间:2018-05-18 17:23:00

标签: python types type-hinting

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

Sub test()

Dim id_col As Long
id_col = Rows(8).Find("ID", LookAt:=xlWhole).Column

Dim target_col As Range

If id_col <> vbNullString Then

    Set target_col = Columns(id_col)

    With target_col
        .TextToColumns , DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
    End With

End If

End Sub

并相应更新。

有什么能帮助自动化这个过程吗?

2 个答案:

答案 0 :(得分:7)

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

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

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

  

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

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

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

答案 1 :(得分:0)

如果您正在寻找“半”自动类型注释,我发现 https://stackoverflow.com/a/44102211/1686377 很有用。特别是它是一个静态分析器,它不会运行您的代码来确定类型。