2

我正在使用带有 sphinx.ext.autodoc 的 Google 样式的文档字符串来自动为我的函数生成文档,并确保它们在代码中正确地自我记录。

我有一个def myfunc(id=None, size=None, hash=None)基于id or size + hash返回信息的函数。如果我们有id作为论据size并且hash不需要,如果我们有sizehash作为论据,则id不需要。

使用 sphinx,可以指定一个可选参数,但在这种情况下,我们不知道什么是强制性的,什么是可选的。这是一个例子:

def get_file(id=0, size=0, hash="")
    """
    Get file metadata.

    Args:
        id (int): id of the file.
        size (int): file size in bytes.
        hash (str): md5 hash of file.

    Returns:
        file_data (str): metadata information about the file.
    """
    if id:
        # Get file with id.
        ...
    elif size and hash:
        # Get file with size and hash.
        ...
    else:
        # Bad arguments, handle error.
        ...

    return file_data

问题是:如何判断文档字符串中需要哪些参数?

您可以轻松地争辩说函数本身就是问题所在,即使结果相同,两个参数对也应该位于单独的函数中:

def get_file_by_id(id)
    """
    Get file metadata from id.

    Args:
        id (int): id of the file.

    Returns:
        file_data (str): metadata information about the file.
    """

    # Get file with id.
    ...

    return file_data

def get_file_by_hash(size, hash)
    """
    Get file metadata from hash.

    Args:
        size (int): file size in bytes.
        hash (str): md5 hash of file.

    Returns:
        file_data (str): metadata information about the file.
    """

    # Get file with hash+size.
    ...

    return file_data

但在这种情况下,如果可能,最好使用单个函数,因为该函数是与另一个使用单个函数的 API 的绑定。

4

1 回答 1

1

根据文档,here,以下示例方法定义:

def module_level_function(param1, param2=None, *args, **kwargs):

将文档字符串定义为:

Args:
    param1 (int): The first parameter.
    param2 (:obj:`str`, optional): The second parameter. Defaults to None.
        Second line of description should be indented.
    *args: Variable length argument list.
    **kwargs: Arbitrary keyword arguments.

因此,您明确说明了什么是可选的,否则将被理解为强制参数。

于 2017-06-16T02:23:09.003 回答