使用扩展类型 (cdef) 和设置纯 python 代码有什么区别?

What's the difference using extension type (cdef) and set up pure python code?

请注意,我是 C 语言的新手。根据 Basic Tutorial of Cython,我认为有两种使用 Cython 的方法:构建纯 Python 代码的扩展,以及使用 Ctype 变量 (cdef)。

我不明白的是它们之间的区别。其中哪一个是使用 Cython 的更有效或更正确的方法?

大多数 Python 代码可以直接“cythonized”,无需更改您的代码。然而,为了充分利用 Cython,您需要通过提供 cdef 和变量类型来调整 Python 代码。不是强制性的,但对于获得您期望从 Cython 获得的体面加速是必不可少的。

主要是历史。

  • 最初 Cython 仅支持 cdef 声明。
  • 添加纯 Python 模式作为向文件添加声明的一种方式,以帮助加快速度,同时不需要 需要 Cython。
  • Python 添加了类型注释。 Cython 可以越来越多地使用这些(使用 annotation_typing 指令,默认为 true)。如果你比 cdef 更喜欢这些语法,那么使用它们。还是不行。

cdef 版本的测试稍微好一些,在“纯 Python”模式下您可以做的事情仍然存在差距。特别是关于与原生 C/C++ 的接口。但大多数情况下,它们是实现同一件事的不同方法,它们应该生成大致相同的代码,因此您应该使用您喜欢的任何一种。您也可以混合使用。