Python Docstring 如何在docstring中写多行列表?

Python Docstring How to write list in multiple lines in docstring?

我正在尝试编写一个列表输出,我在 doctest 中将其扩展为多行。但是实际输出与我的预期不符。

这是我的代码。

def make_board(dimension: int, queens: list):
    """

    >>> make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
    [[False, True, False, False],
     [False, False, False, True],
     [True, False, False, False],
     [False, False, True, False]]
    """
    assert dimension == len(queens)
    return [[(row, col) in queens for col in range(dimension)] for row in range(dimension)]

这是测试结果

Failed example:
    make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
Expected:
    [[False, True, False, False],
     [False, False, False, True],
     [True, False, False, False],
     [False, False, True, False]]
Got:
    [[False, True, False, False], [False, False, False, True], [True, False, False, False], [False, False, True, False]]

如果你想看到一个漂亮的结果,你可以使用内置打印:

from pprint import pprint

def make_board(dimension: int, queens: list):
"""

>>> make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
[[False, True, False, False],
 [False, False, False, True],
 [True, False, False, False],
 [False, False, True, False]]
"""
assert dimension == len(queens)

result = [[(row, col) in queens for col in range(dimension)] for row in range(dimension)]
pprint(result)

return result

每次调用函数都会看到结果,所以我不建议这样做。

>>>a=make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
[[False, True, False, False],
[False, False, False, True],
[True, False, False, False],
[False, False, True, False]]

>>>a
[[False, True, False, False], [False, False, False, True], [True, False, False, False], [False, False, True, False]]

使用NORMALIZE_WHITESPACE选项。它可以通过不同的方式启用,例如通过文档字符串中的指令:

def make_board(dimension: int, queens: list):
    """
    >>> make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)]) # doctest: +NORMALIZE_WHITESPACE
    [[False, True, False, False],
     [False, False, False, True],
     [True, False, False, False],
     [False, False, True, False]]
    """