2015-03-18 2 views
2

Как расширения CPython должны быть записаны для pydoc, чтобы указать имя аргумента вместо (...)?Документация на основе ключевых слов для расширений CPython

Я следовал official python tutorial about extending 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

Глядя на sources of 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, и мы получим (...) на выходе.

+0

ОК, нет надежды :(Спасибо за ваш ответ! –