我应该使用def,cdef还是cpdef定义我的Cython函数以获得最佳性能?

时间:2018-03-08 11:58:06

标签: function cython definition function-definition

如果我想要最佳性能,我怎么知道在定义Cython函数时是使用def,cdef还是cpdef?

1 个答案:

答案 0 :(得分:11)

如果您想获得最佳效果,您应该知道this answer中提到的相关问题:

  

调用函数后,cdefdef函数内的代码运行速度没有差异。

因此,为了获得最佳的Cython性能,您应该始终静态地键入所有参数和变量,直觉上您会想要使用cdef,但有一些警告我构建了下面的流程图(也基于前面提到的答案):

def, cdef, cpdef flowchart

此外,请注意:

  

cpdef函数使Cython生成cdef函数(允许从Cython快速调用函数)和def函数(允许您从Python调用它)。在def函数中,只调用cdef函数。

......并且来自Cython文档:

  

这利用了早期绑定,因此在使用C基本类型时(使用cpdef),cdef函数可能会尽可能快。 cpdef函数在传递Python对象时使用动态绑定,这可能会慢得多,可能与def声明的函数一样慢。

还存在case-specific benchmark in the Cython documentation(经常从Python调用函数),它产生以下结果:

enter image description here