函数注释:PEP-3107
我遇到了一段演示 Python3 函数注释的代码片段。这个概念很简单,但我想不出为什么这些是在 Python3 中实现的,或者它们有什么好的用途。也许SO可以启发我?
这个怎么运作:
def foo(a: 'x', b: 5 + 6, c: list) -> max(2, 9): ... function body ...
参数后冒号后面的所有内容都是“注释”,而后面的信息->是函数返回值的注释。
->
foo.func_annotations 会返回一个字典:
{'a': 'x', 'b': 11, 'c': list, 'return': 9}
有这个可用的意义是什么?
我认为这实际上很棒。
来自学术背景,我可以告诉你,注释已经证明它们对于为 Java 等语言启用智能静态分析器是非常宝贵的。例如,您可以定义诸如状态限制、允许访问的线程、架构限制等语义,并且有相当多的工具可以读取并处理它们,以提供超出您从编译器获得的保证的保证。你甚至可以编写检查前置条件/后置条件的东西。
我觉得在 Python 中特别需要这样的东西,因为它的类型较弱,但实际上没有任何结构可以让这种简单直接成为官方语法的一部分。
除了保证之外,注释还有其他用途。我可以看到如何将基于 Java 的工具应用到 Python。例如,我有一个工具可以让您为方法分配特殊警告,并在您调用它们时提示您应该阅读它们的文档(例如,假设您有一个不能以负值调用的方法,但它是从名称上看不直观)。使用注释,我可以在技术上为 Python 编写类似的东西。同样,如果有官方的语法,可以编写一个基于标签组织大类中方法的工具。