功能注释: PEP-3107
我遇到了一段演示 Python3 函数注释的代码。这个概念很简单,但我想不出为什么这些是在 Python3 中实现的,或者它们有什么好的用途。也许可以启发我?
这个怎么运作:
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}
提供这个有什么意义?
原文由 agscala 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为这实际上很棒。
来自学术背景,我可以告诉你,注释已经证明了它们对于为 Java 等语言启用智能静态分析器的价值是无价的。例如,您可以定义状态限制、允许访问的线程、体系结构限制等语义,然后有相当多的工具可以读取这些并处理它们以提供超出您从编译器获得的保证。您甚至可以编写检查先决条件/后置条件的东西。
我觉得 Python 中特别需要这样的东西,因为它的类型较弱,但实际上没有任何结构可以使它变得简单明了并成为官方语法的一部分。
除了保证之外,注释还有其他用途。我可以看到如何将基于 Java 的工具应用到 Python。例如,我有一个工具可以让你为方法分配特殊警告,并在你调用它们时给你指示你应该阅读它们的文档(例如,假设你有一个方法不能用负值调用,但它是从名称上不直观)。有了注释,我可以在技术上为 Python 编写类似这样的东西。同样的,如果有官方的语法,也可以编写一个基于标签在一个大类中组织方法的工具。