Python 的注释标记

Posted on Wed, 25 Dec 2024 16:10:40 +0800 by LiangMingJian


前言

在 Python 中,支持使用一些如 #noqa#todo 这样的注释标记。这些注释标记能更好的提高代码的可读性,同时在 IDE,如 PyCharm 中,这些标记还会有特殊的功能。

代码检查类

# noqa

让静态代码检查工具忽略这行的所有警告。

比如下面的 except 存在警告,此时可以在后面添加注释 # noqa 让编译器忽略这个警告。

在 PyCharm 中,# noqa 能忽略错误级下的所有警告。

特别的,可以使用 # noqa: 错误码 来忽略特定类型的警报,比如下面出现未使用的 import 语句,那么我们可以使用 # noqa: F401 单独忽略这一警报。

对应错误的错误码可以在静态代码检查工具 Flake8,Pylint 的文档中查找。

Pylint
Flake8

# noinspection 检查名称

忽略某些代码检查警告。

和 # noqa 不同,# noinspection 需要指定检查名称,它能对特定检查规则进行忽略,不局限于一种错误类型,同时它不使用错误码,而是检查名称,使得代码更易读,比如 # noinspection PyBroadException 这个可以忽略“过于宽泛的异常捕获”这一类型的错误。

PyCharm 支持的检查类型请查看:

Disabling and enabling inspections | PyCharm

任务标记类

# TODO

标注为需要完成的功能。

在 PyCharm 中,可以在侧边栏的 TODO 工具中,可以快速定位所有具有这个标识的代码。

# FIXME

标注为需要修正的功能。

同样的,在 PyCharm 侧边栏的 TODO 工具中,可以快速定位所有具有这个标识的代码。

文档生成类

文件级/模块级文档

在 Python 文件的开头标注模块信息,在其他文件导入时进行提示。

"""模块的简要描述

这里是模块的详细说明
"""
import sys

def func():
    pass

函数级/方法级文档

在函数的定义后面标注函数信息,在其他地方调用时即可查看提示。

Google 风格

def func(x, y, c):
    """功能说明
    
    Args:
        x (int): 参数说明
        y (int): 参数说明
        c (str): 参数说明
    Returns:
        str: 返回值说明
    Raises:
        ValueError: 参数无效时触发
    """
    return f'{c}: {x + y}'

Sphinx 风格

def func(x, y, c):
    """功能说明

    :param x: 参数说明
    :type x: int
    :param y: 参数说明
    :type y: int
    :param c: 参数说明
    :returns: 返回值说明
    :rtype: str
    :raises ValueError: 异常说明
    """
    return f'{c}: {x + y}'

Numpy 风格

def func(x, y, c):
    """功能说明

    Parameters
    ----------
    x : int
        参数详细说明
    y : int
        参数详细说明
    c
        参数详细说明
    Returns
    -------
    str
        返回值详细说明
    Raises
    -------
    ValueError
        异常说明
    """
    return f'{c}: {x + y}'

类级文档

在类定义后面标注类基础信息,在实例化类时可以查看提示。

class MyClass:
    """功能描述

    类的详细说明

    Attributes:
        x (int): 属性说明
        y (int): 属性说明
        z: 属性说明
    """

    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
        pass

    def func(self):
        pass

强制类型注解

变量类型提示

强制指定变量的类型,当错误类型被赋值时,IDE 会提示错误。

a = []     # type: list[str]
b = 1      # type: int
c = 'str'  # type: str

参数类型提示

def func(x: int, y: str, z: list, c: dict) -> str:
    pass