如何在文档中显示Cython函数的参数?

How to display the arguments of a Cython function in the documentation?

下面的代码定义了一个简单的cython函数(为了方便起见,使用ipython magic)。

1
2
3
4
%load_ext cython
%%cython
def f(float x, float y=2):
    return x+y

然后,调用help(f)给出以下消息:

1
2
3
Help on built-in function f in module _cython_magic_e37eeabbc63d5167217465ba978239fc:

f(...)

注意,没有显示f的参数。另外,对于ipython中的参数名(例如,键入f(x,然后键入tab),选项卡完成也不起作用。

如果不使用Cython定义此函数:

1
2
def g(x, y=2):
    return x+y

打电话给help(g)表示这一点,标签完成工作按预期进行:

1
2
3
Help on function g in module __main__:

g(x, y=2)

有没有一种方法可以让这种行为和赛通功能联系起来?我试过用伊普西顿魔法,但没有成功。


不同意商定的答案。

虽然启用binding确实会产生代码中显示的文档字符串的副作用,但它还将所有其他python类属性绑定到cython扩展类,这会降低性能,增加用于每个扩展对象的内存等等。

仅启用docstring而不产生副作用的正确标志是embedsignature=True

它既可以用作所有函数之上的decorator-@cython.embedsignature(True),也可以作为setup.py扩展中cython指令的一部分,用于所有cython函数-{'embedsignature': True}

来自文档:

embedsignature (True / False)

If set to True, Cython will embed a textual copy of the call signature in the docstring of all Python visible functions and
classes. Tools like IPython and epydoc can thus display the signature,
which cannot otherwise be retrieved after compilation. Default is
False.


1
2
3
4
5
import cython

@cython.binding(True)
def f(float x, float y=2):
    # ...

现在help(f)给出

Help on cython_function_or_method in module cy_exc:

f(x, y=2.0)

文件上说

When enabled, functions will bind to an instance when looked up as a class attribute (hence the name) and will emulate the attributes of Python functions, including introspections like argument names and annotations. Default is False.

您可以以其他方式启用编译选项(例如,如果希望在任何地方都启用它)。

你可能还想看看这个相关的问题