Документация по ключевым словам для расширений 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, и мы получим (...) на выходе.

Другие вопросы по тегам