如何编写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.
答案 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}在输出中。