正如@user2357112 所评论的那样#cython: cdivision=True
矛盾from __future__ import division
。这段代码是说明性的:
#cython: wraparound=False
#cython: boundscheck=False
#cython: nonecheck=False
#cython: profile=False
from __future__ import division
def main():
cdef double i, j
i = 0
j = 2
print 1/j
print 1/i
print 1/2
提高:
print 1/i
ZeroDivisionError: float division
添加#cython: cdivision=True
它将给出:
0.5
inf
0
您可以在其中看到1/2
正在处理的楼层划分。
在这种情况下,我建议1/2.
在使用 Python 2.x 时在任何需要浮点除法的地方应用浮点...
如您所述交换线路:
from __future__ import division
#cython: wraparound=False
#cython: boundscheck=False
#cython: nonecheck=False
#cython: profile=False
#cython: cdivision=True
将取消所有Cython 全局指令,因为它们“必须出现在任何代码之前(但可以出现在其他注释或空格之后)”。