Cython 的正确性

7 投票
1 回答
715 浏览
提问于 2025-04-16 14:08

用Cython生成的代码总是和它所基于的Python代码一样正确吗?

可能对其他读者有帮助的是,讨论一下Cython的静态类型声明和其他Cython特性(如果有的话),不过我只关心通过将Python模块重命名为*.pyx来创建Cython文件的情况。

我只关心Cython所覆盖的Python的一个子集。

1 个回答

10

一般来说,是的。当然也有一些bug(大多数是关于扩展支持的Python子集的,实际上导致生成的C代码不正确的bug相对少见),还有一些需要注意的事项(不过在那份短名单上,似乎只有一项与Python的语义不同)。

当你在纯Python模式下添加静态类型时,有些情况下编译成Cython和直接运行Python代码会有区别。比如无符号整数(举个例子:如上面提到的链接所说,如果是无符号的,-n会回绕,因此range(-n, n)会是空的),还有整数溢出的问题(Python会把int(C语言中的long)提升为long(任意精度整数))。

撰写回答