小编典典

Python3 的“函数注释”有什么好的用途?

all

函数注释: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}

有这个可用的意义是什么?


阅读 4026

收藏
2022-09-02

共1个答案

小编典典

我认为这实际上很棒。

来自学术背景,我可以告诉你,注释已经证明它们对于为 Java
等语言启用智能静态分析器是非常宝贵的。例如,您可以定义诸如状态限制、允许访问的线程、架构限制等语义,并且有相当多的工具可以读取并处理它们,以提供超出您从编译器获得的保证的保证。你甚至可以编写检查前置条件/​​后置条件的东西。

我觉得在 Python 中特别需要这样的东西,因为它的类型较弱,但实际上没有任何结构可以让这种简单直接成为官方语法的一部分。

除了保证之外,注释还有其他用途。我可以看到如何将基于 Java 的工具应用到
Python。例如,我有一个工具可以让您为方法分配特殊警告,并在您调用它们时提示您应该阅读它们的文档(例如,假设您有一个不能以负值调用的方法,但它是从名称上看不直观)。使用注释,我可以在技术上为
Python 编写类似的东西。同样,如果有官方的语法,可以编写一个基于标签组织大类中方法的工具。

2022-09-02