最常见的 Python 文档字符串格式有哪些?[关闭]

2025-02-20 09:22:00
admin
原创
25
摘要:问题描述:我见过几种用 Python 编写文档字符串的不同风格,其中最流行的风格是什么?解决方案 1:格式正如其他文章所示,Python 文档字符串可以按照多种格式编写。但是,未提及默认的 Sphinx 文档字符串格式,该格式基于reStructuredText (reST) 。您可以在此博客文章中获取有关主...

问题描述:

我见过几种用 Python 编写文档字符串的不同风格,其中最流行的风格是什么?


解决方案 1:

格式

正如其他文章所示,Python 文档字符串可以按照多种格式编写。但是,未提及默认的 Sphinx 文档字符串格式,该格式基于reStructuredText (reST) 。您可以在此博客文章中获取有关主要格式的一些信息。

请注意,reST 是PEP 287推荐的

以下是文档字符串的主要使用格式。

  • Epytext


历史上,类似javadoc的风格很流行,因此它被用作Epydoc(具有调用Epytext格式)生成文档的基础。

例子:

"""
This is a javadoc style.

@param param1: this is a first param
@param param2: this is a second param
@return: this is a description of what is returned
@raise keyError: raises an exception
"""
  • 休息


如今,可能更流行的格式是Sphinx用于生成文档的reStructuredText (reST) 格式。注意:JetBrains PyCharm 默认使用该格式(定义方法后输入三引号并按回车键)。Pyment 也默认使用该格式作为输出格式。

例子:

"""
This is a reST style.

:param param1: this is a first param
:param param2: this is a second param
:returns: this is a description of what is returned
:raises keyError: raises an exception
"""
  • 谷歌


Google 有自己的常用格式。它也可以被 Sphinx 解释(即使用Napoleon 插件)。

例子:

"""
This is an example of Google style.

Args:
    param1: This is the first param.
    param2: This is a second param.

Returns:
    This is a description of what is returned.

Raises:
    KeyError: Raises an exception.
"""

更多示例

-Numpydoc

请注意,Numpy 建议遵循基于 Google 格式并可供 Sphinx 使用的numpydoc 。

"""
My numpydoc description of a kind
of very exhautive numpydoc format docstring.

Parameters
----------
first : array_like
    the 1st param name `first`
second :
    the 2nd param
third : {'value', 'other'}, optional
    the 3rd param, by default 'value'

Returns
-------
string
    a value in a string

Raises
------
KeyError
    when a key error
OtherError
    when an other error
"""

转换/生成

可以使用Pyment这样的工具自动为尚未记录的 Python 项目生成文档字符串,或者将现有的文档字符串(可以混合多种格式)从一种格式转换为另一种格式。

注意:示例取自Pyment 文档

解决方案 2:

Google 风格指南包含一份出色的 Python 风格指南。它包含可读文档字符串语法的约定,提供比 PEP-257 更好的指导。例如:

def square_root(n):
    """Calculate the square root of a number.

    Args:
        n: the number to get the square root of.
    Returns:
        the square root of n.
    Raises:
        TypeError: if n is not a number.
        ValueError: if n is negative.

    """
    pass

我喜欢扩展它,在参数中包含类型信息,如Sphinx 文档教程中所述。例如:

def add_value(self, value):
    """Add a new value.

       Args:
           value (str): the value to add.
    """
    pass

解决方案 3:

PEP-257中的文档字符串约定比 PEP-8 更详细。

然而,文档字符串似乎比代码的其他部分更加个性化。不同的项目会有自己的标准。

我倾向于始终包含文档字符串,因为它们倾向于快速演示如何使用该函数以及它的作用。

无论字符串的长度如何,我都希望保持一致。我喜欢在缩进和间距一致的情况下编写代码。这意味着,我使用:

def sq(n):
    """
    Return the square of n. 
    """
    return n * n

超过:

def sq(n):
    """Returns the square of n."""
    return n * n

并且倾向于在较长的文档字符串中省略第一行的注释:

def sq(n):
    """
    Return the square of n, accepting all numeric types:

    >>> sq(10)
    100

    >>> sq(10.434)
    108.86835599999999

    Raises a TypeError when input is invalid:

    >>> sq(4*'435')
    Traceback (most recent call last):
      ...
    TypeError: can't multiply sequence by non-int of type 'str'

    """
    return n*n

这意味着我发现像这样开头的文档字符串很混乱。

def sq(n):
    """Return the squared result. 
    ...

解决方案 4:

显然没有人提到它:您也可以使用Numpy Docstring 标准。它在科学界被广泛使用。

用于解析 Google 风格文档字符串的 Napolean sphinx 扩展(在@Nathan 的回答中推荐)也支持 Numpy 风格的文档字符串,并对两者进行了简短的比较。

最后给出一个基本的例子来说明它是什么样子的:

def func(arg1, arg2):
    """Summary line.

    Extended description of function.

    Parameters
    ----------
    arg1 : int
        Description of arg1
    arg2 : str
        Description of arg2

    Returns
    -------
    bool
        Description of return value

    See Also
    --------
    otherfunc : some related other function

    Examples
    --------
    These are written in doctest format, and should illustrate how to
    use the function.

    >>> a=[1,2,3]
    >>> print [x + 3 for x in a]
    [4, 5, 6]
    """
    return True

解决方案 5:

这是 Python;任何事情都有可能发生。考虑如何发布您的文档。除了源代码的读者之外,文档字符串是不可见的。

人们非常喜欢在网络上浏览和搜索文档。要实现这一点,请使用文档工具Sphinx。它是记录 Python 项目的事实标准。该产品非常漂亮 - 请查看https://python-guide.readthedocs.org/en/latest/。网站Read the Docs将免费托管您的文档。

解决方案 6:

我建议使用 Vladimir Keleshev 的pep257 Python 程序来根据PEP-257和Numpy Docstring 标准检查您的文档字符串,以描述参数、返回等。

pep257 将报告您与标准之间的差异,其调用方式类似于 pylint 和 pep8。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用