首页 > 解决方案 > 如何在文档中显示 Cython 函数的参数?

问题描述

以下代码定义了一个简单的 Cython 函数(为方便起见,使用 Ipython 魔法)。

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

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

Help on built-in function f in module _cython_magic_e37eeabbc63d5167217465ba978239fc:

f(...)

请注意,f未显示 的参数。此外,制表符补全也不适用于 ipython 中的参数名称(例如,键入f(xthen tab)。

如果我在不使用 Cython 的情况下定义此函数:

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

调用help(g)给出了这一点,并且制表符完成按预期工作:

Help on function g in module __main__:

g(x, y=2)

有没有办法通过 Cython 函数获得这种行为?我尝试了def, cdef, cpdef, 有和没有 ipython 魔法,但没有成功。

标签: cython

解决方案


不同意同意的答案。

虽然启用binding确实具有在代码中显示文档字符串的副作用,但它还将所有其他 Python 类属性绑定到 Cython 扩展类,这会降低性能,每个扩展对象使用更多内存等等。

仅启用没有副作用的文档字符串的正确标志是embedsignature=True.

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

来自文档

嵌入签名(真/假)

如果设置为 True,Cython 将在所有 Python 可见函数和类的文档字符串中嵌入调用签名的文本副本。因此,IPython 和 epydoc 等工具可以显示签名,否则在编译后无法检索到。默认为假。


推荐阅读