使用 docstrings 编写文档

一个文档字符串是一个多行注释用于记录模块,类,函数和方法。它必须是它描述的组件的第一个声明。

def hello(name):
    """Greet someone.

    Print a greeting ("Hello") for the person with the given name.
    """

    print("Hello "+name)
class Greeter:
    """An object used to greet people.

    It contains multiple greeting functions for several languages
    and times of the  day.
    """

docstring 的值可以在程序中访问, 并且 - 例如 - 由 help 命令使用。

语法约定

PEP 257

PEP 257 定义了文档字符串注释的语法标准。它基本上允许两种类型:

  • 单行 Docstrings:

根据 PEP 257,它们应该用于简短的功能。一切都放在一行,例如:

def hello():
    """Say hello to your friends."""
    print("Hello my friends!")

文档字符串应以句号结尾,动词应以命令形式结束。

  • 多行文档字符串:

多行文档字符串应该用于更长,更复杂的函数,模块或类。

def hello(name, language="en"):
    """Say hello to a person.

    Arguments:
    name: the name of the person
    language: the language in which the person should be greeted
    """

    print(greeting[language]+" "+name)

它们以简短的摘要(相当于单行文档字符串的内容)开头,它可以与引号位于同一行或下一行,提供其他详细信息和列表参数以及返回值。

注意 PEP 257 定义了应该在 docstring 中给出的信息 ,它没有定义应该给出的格式。这就是其他方和文档解析工具为文档指定自己的标准的原因,其中一些列在下面和这个问题中

狮身人面像

Sphinx 是一个基于 docstrings 为 Python 项目生成基于 HTML 的文档的工具。它使用的标记语言是 reStructuredText 。他们定义了自己的文档标准,pythonhosted.org 主持了对它们非常好的描述 。例如, pycharm IDE使用 Sphinx 格式。

使用 Sphinx / reStructuredText 格式可以像这样记录一个函数:

def hello(name, language="en"):
    """Say hello to a person.

    :param name: the name of the person
    :type name: str
    :param language: the language in which the person should be greeted
    :type language: str
    :return: a number
    :rtype: int
    """

    print(greeting[language]+" "+name)
    return 4

Google Python 样式指南

Google 发布了 Google Python 样式指南 ,该指南定义了 Python 的编码约定,包括文档注释。与 Sphinx / reST 相比,许多人说根据 Google 指南的文档更易于人类阅读。

上面提到pythonhosted.org 页面还提供了一些根据 Google Style Guide 提供的良好文档示例。

使用 Napoleon 插件,Sphinx 还可以解析符合 Google Style Guide 标准的文档。

使用 Google 样式指南格式可以将此功能记录为:

def hello(name, language="en"):
    """Say hello to a person.

    Args:
        name: the name of the person as string
        language: the language code string

    Returns:
        A number.
    """

    print(greeting[language]+" "+name)
    return 4