CPython扩展的基于关键字的文档

时间:2015-03-18 20:26:03

标签: python pydoc

如何编写CPython扩展,以便pydoc提及参数'而不是(...)

我已经关注了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 个答案:

答案 0 :(得分: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)在CPython扩展的情况下返回False。 由于inspect.isfunction()检查对象是 Python函数,而C扩展函数被认为是 builtins ,那么上面将返回False,我们得到{{1}在输出中。