Python 中的函数注解

17 Mar 2025 | 4 分钟阅读

函数注解是写在函数旁边的一些任意表达式,它们在编译时进行求值。它们在运行时不存在,对 Python 也没有意义。它们由第三方或外部 Python 库使用和解释。

众所周知,函数注解由第三方库使用,因为不同的库可以从这些函数注解中获得不同的好处。例如:

  1. 带字符串的函数注解可用作编译时消息,用于描述不同方法、类和变量的功能。
  2. [def fxn(a:"int", b:"float"=5.0) -> "int"]

在上面的示例中,这些注解可用于定义参数的数据类型,因为 Python 支持动态类型检查,并且无法检查返回类型或数据类型。像 mypy 这样的库使用这类注解。

函数注解的语法

函数注解可以以多种方式编写,如下所示:

1. 简单参数的函数注解

通过这种方式,我们可以在参数名后使用冒号,然后在冒号后写表达式。表达式可以是任何内容,例如参数的任何数据类型或包含任何消息的任何字符串。

例如

2. 变长参数的函数注解

如果我们希望函数参数具有任意数量且表达式相同的参数,则可以使用这种函数注解方式。

例如

3. 嵌套参数的函数注解

如果我们想在函数调用中将列表作为参数传递,那么我们必须分别对单个元素应用函数注解。

例如

4. 返回类型的函数注解

返回类型的注解通过 “->” 运算符完成。

例如

我们可以通过以下示例理解 Python 中的函数注解:

示例

输出

Function Annotations in Python

说明

在上面的代码中,我们有一个函数,用于计算前 n 个斐波那契数。它接受 n 和一个空列表作为参数,并返回包含结果的列表。

在函数描述中,我们定义了 n 将是整数类型,res 变量将是列表类型。通过函数注解,我们还定义了返回类型将是列表。

注意:我们可以通过各种方法访问函数中使用的所有函数注解:

1. 使用 '__annotations__'

'__annotations__' 属性用于获取函数中的所有注解。它返回一个字典,其中包含键值对,其中键是参数,值是它们各自的表达式。

示例 2

输出

Function Annotations in Python

说明

在上面的代码中,我们在函数中使用了函数注解,该函数返回前 n 个斐波那契数的列表。

此外,我们使用 '__annotations__' 属性打印了函数注解,我们以字典的形式得到了结果。

2. 使用标准 Python 模块

在 Python 中,有一个名为 pydoc 的标准模块,可用于获取函数注解。

pydoc.help() 函数提供了一个 shell 环境,我们可以在其中获取与任何文件相关的任何信息,并且还可以轻松获取任何函数的注解。

3. 使用 inspect 模块

在 Python 中,我们还有另一个名为 inspect 的标准模块。此模块提供有关任何文件、模块、类或对象的信息。

它有很多函数可以获取信息。Inspect 模块的 getfullargspec 函数将用于获取函数注解详情和其他所有信息。

示例 3

输出

Function Annotations in Python

说明

在上面的代码中,我们使用了 getfullargspec 函数,并获得了有关函数的完整详细信息,包括函数注解。