Документация по ключевым словам для расширений CPython
Как расширения CPython должны быть написаны для того, чтобы pydoc
упомянуть имя аргумента вместо (...)
?
Я следовал официальному руководству по расширению Python, и даже для keywdarg.parrot
процедуру я получаю:
$> pydoc kewdarg.parrot
parrot(...)
Print a lovely skit to standard output.
тогда как я ожидал бы
parrot(voltage, state="a stiff", action="voom", type="Norwegian Blue")
Print a lovely skit to standard output.
1 ответ
Решение
Глядя на источники Pydoc, если я не ошибаюсь, строфа, которая производит '...' это:
if inspect.isfunction(object):
args, varargs, varkw, defaults = inspect.getargspec(object)
argspec = inspect.formatargspec(
args, varargs, varkw, defaults, formatvalue=self.formatvalue)
if realname == '<lambda>':
title = '<strong>%s</strong> <em>lambda</em> ' % name
argspec = argspec[1:-1] # remove parentheses
else:
argspec = '(...)'
Так, inspect.isfunction(object)
возвращает False в случае расширений CPython. Поскольку inspect.isfunction() проверяет, что объект является функцией Python, а функции расширения C считаются встроенными, то приведенное выше вернет False, и мы получим (...)
на выходе.