假设我想要最佳性能,我如何知道在定义 Cython 函数时是使用 def、cdef 还是 cpdef?
问问题
1544 次
1 回答
24
如果您想要获得最佳性能,您应该知道相关问题的答案中提到的内容:
cdef
一旦函数被调用,a和函数中的代码运行速度就没有区别了def
。
因此,为了获得最佳 Cython 性能,您应该始终静态键入所有参数和变量,然后直观地尝试使用cdef
,但有一些注意事项我构建了下面的流程图(也基于前面提到的答案):
此外,请注意:
cpdef
函数使 Cython 生成一个cdef
函数(允许从 Cython 快速调用函数)和一个def
函数(允许您从 Python 调用它)。内部def
函数只是调用cdef
函数。
...以及来自 Cython 文档:
这利用了早期绑定,以便
cpdef
函数在使用 C 基本类型时尽可能快(通过使用cdef
)。cpdef
函数在传递 Python 对象时使用动态绑定,这可能会慢得多,可能与def
声明的函数一样慢。
Cython 文档中还存在一个特定于案例的基准测试(经常从 Python 调用该函数),它产生以下结果:
于 2018-03-08T11:58:05.927 回答