Сфинкс форматирование с плавающей точкой - PullRequest
7 голосов
/ 31 августа 2011

Я использую Sphinx для генерации документации из кода.Кто-нибудь знает, есть ли способ управления форматированием чисел с плавающей запятой, сгенерированных из аргументов по умолчанию.

Например, если у меня есть следующая функция:

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

Сгенерированная документация выглядит примерно так:

foo(x = 0.96999999999997)

Очевидно, что это проблема точности с плавающей запятой,но есть ли способ, чтобы документация не выглядела так ужасно?

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Вы можете переопределить сигнатуру функции с помощью директивы .. autofunction::. Итак, чтобы обратиться к вашему примеру, функция, определенная как foo(x=0.97) в модуле bar:

.. automodule:: bar

   .. autofunction:: foo(x=0.97)

И полученный документ будет использовать предоставленную подпись вместо интерпретированной версии с действительно длинным номером.

Вы можете сделать это эквивалентно с .. autoclass:: и .. automethod:: и т.п. Это использование описано в разделе «Параметры и расширенное использование» в этой части sphinx.ext.autodoc docs.

0 голосов
/ 31 августа 2011

Я не использовал 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
...