以下代码定义了一个简单的 Cython 函数(为了方便起见,使用 Ipython magic)。
%load_ext cython
%%cython
def f(float x, float y=2):
return x+y
Run Code Online (Sandbox Code Playgroud)
然后,调用help(f)会给出以下消息:
Help on built-in function f in module _cython_magic_e37eeabbc63d5167217465ba978239fc:
f(...)
Run Code Online (Sandbox Code Playgroud)
f请注意,未显示 的参数。此外,制表符补全对于 ipython 中的参数名称也不起作用(例如键入f(xthen tab)。
如果我在不使用 Cython 的情况下定义此函数:
def g(x, y=2):
return x+y
Run Code Online (Sandbox Code Playgroud)
调用help(g)给出了这个并且制表符完成按预期工作:
Help on function g in module __main__:
g(x, y=2)
Run Code Online (Sandbox Code Playgroud)
有没有办法通过 Cython 函数获得这种行为?我尝试使用def, cdef, cpdef, 有或没有 ipython 魔法,但没有成功。
不同意同意的答案。
虽然启用确实binding会产生代码中显示文档字符串的副作用,但它还会将所有其他 Python 类属性绑定到 Cython 扩展类,这会导致性能降低、每个扩展对象使用更多内存等。
仅启用文档字符串而没有副作用的正确标志是embedsignature=True。
它可以用作装饰器 -@cython.embedsignature(True)在所有函数之上,也可以用作 setup.py 中 cython 指令的一部分扩展以应用于所有 Cython 函数 -{'embedsignature': True}
来自文档:
嵌入签名(正确/错误)
如果设置为 True,Cython 将在所有 Python 可见函数和类的文档字符串中嵌入调用签名的文本副本。因此,IPython 和 epydoc 等工具可以显示签名,否则编译后无法检索该签名。默认值为 False。
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |