Sphinx浮点数格式化

7 投票
2 回答
656 浏览
提问于 2025-04-17 00:56

我正在使用Sphinx从代码生成文档。有人知道有没有办法控制从默认参数生成的浮点数的格式吗?

比如我有以下这个函数:

def f(x = 0.97):
    return x+1

生成的文档看起来是这样的:

foo(x = 0.96999999999997)

显然这是浮点数精度的问题,但有没有办法让文档看起来不那么难看呢?

2 个回答

0

我没有用过Sphinx,所以不确定这个方法是否有效,但我猜测repr()是用来决定文档格式的。你可以试着创建一个float的子类,并自定义一个__repr__方法,这样可以返回一个看起来更好看的数字,看看这样是否有帮助:

class my_float(float):
    def __repr__(self):
        return str(self)

>>> float(0.97)
0.96999999999999997
>>> my_float(0.97)
0.97

>>> def foo(x = my_float(0.97)):
...     return x+1
... 
>>> foo()
1.97
1

你可以用 .. autofunction:: 这个指令来覆盖一个函数的签名。举个例子,如果在模块 bar 中定义了一个函数 foo(x=0.97)

.. automodule:: bar

   .. autofunction:: foo(x=0.97)

那么生成的文档会使用你提供的签名,而不是那个包含很长数字的解释版本。

你也可以用 .. autoclass::.. automethod:: 等类似的指令来做到这一点。这些用法在 sphinx.ext.autodoc 文档的“选项和高级用法”部分有详细说明。

撰写回答