Прошло 7 лет , но вы можете включить сигнатуру для функции расширения C и классов .
Сам Python использует Argument Clinic для динамического генерирования подписей. Затем некоторые механики создают __text_signature__
, и это может быть самоанализ (например, с help
). @MartijnPieters довольно хорошо объяснил этот процесс в этом ответе .
На самом деле вы можете получить клинику аргументов от python и делать это динамически, но я предпочитаю ручной способ: добавление подписи в строку документации:
В вашем случае:
PyDoc_STRVAR(
foo_doc,
"foo(timeout, flags=None, /)\n"
"--\n"
"\n"
"Great example function\n"
"Arguments: (timeout, flags=None)\n"
"Doc blahblah doc doc doc.");
Я интенсивно использовал это в своей посылке: iteration_utilities/src
. Итак, чтобы продемонстрировать, что это работает, я использую одну из функций расширения C, предоставляемых этим пакетом:
>>> from iteration_utilities import minmax
>>> help(minmax)
Help on built-in function minmax in module iteration_utilities._cfuncs:
minmax(iterable, /, key, default)
Computes the minimum and maximum values in one-pass using only
``1.5*len(iterable)`` comparisons. Recipe based on the snippet
of Raymond Hettinger ([0]_) but significantly modified.
Parameters
----------
iterable : iterable
The `iterable` for which to calculate the minimum and maximum.
[...]
Строка документации для этой функции определена этот файл .
Важно понимать, что это невозможно для питона <3.4 </strong>, и вам нужно следовать некоторым правилам:
Вам необходимо включить --\n\n
после строки определения подписи.
Подпись должна быть в первой строке строки документа.
Подпись должна быть действительной, т. Е. foo(a, b=1, c)
терпит неудачу, потому что невозможно определить позиционные аргументы после аргументов по умолчанию.
Вы можете предоставить только одну подпись. Так что это не сработает, если вы используете что-то вроде:
foo(a)
foo(x, a, b)
--
Narrative documentation