cython - 如何在文档中显示 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(x
then 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 魔法,但没有成功。
解决方案
不同意同意的答案。
虽然启用binding
确实具有在代码中显示文档字符串的副作用,但它还将所有其他 Python 类属性绑定到 Cython 扩展类,这会降低性能,每个扩展对象使用更多内存等等。
仅启用没有副作用的文档字符串的正确标志是embedsignature=True
.
它既可以用作装饰器 -@cython.embedsignature(True)
在所有函数之上,也可以作为 setup.py 扩展中 cython 指令的一部分,以应用于所有 Cython 函数 -{'embedsignature': True}
来自文档:
嵌入签名(真/假)
如果设置为 True,Cython 将在所有 Python 可见函数和类的文档字符串中嵌入调用签名的文本副本。因此,IPython 和 epydoc 等工具可以显示签名,否则在编译后无法检索到。默认为假。
推荐阅读
- ruby-on-rails - 有人可以协助将这个面向对象设计图示例翻译成代码吗?
- amazon-web-services - 计数为 0 的 Terraform 资源和取决于资源的变量
- java - 带有focusLost事件的Java多个消息对话框
- c# - GetThumbnailAsync() 在 VOB 文件上非常慢
- c++ - 为什么我的代码出现分段错误
- reactjs - Bootstrap 4 Carousel 仅在某些条件下自动播放
- python-2.7 - EndpointConnectionError:无法连接到端点 URL:“http://169.254.169.254/.....”
- javascript - 试图将用户的值发送到另一个 HTML 文件
- c# - 在 ASP.NET Core 3.0 Preview 5 或更高版本中配置 AutoFac
- jquery - FullCalendar fc-more 在弹出窗口中显示大量重复项