使用Cython标头指令并利用未来导入的正确方法是什么? Python 2.7.x
示例:
1: from __future__ import division
2: #cython: boundscheck=False
3: #cython: wraparound=False
<strike>4: #cython: cdivision=True</strike>
4: #cython: cdivision=False
这确保了除法按预期工作(使用未来版本),但我不确定是否正在遵守指令。将第1行与第4行交换会导致除法恢复为标准的Python 2.x方法。
答案 0 :(得分:3)
由@ 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
被处理为分区。
在这种情况下,我建议在使用Python 2.x时将浮点1/2.
应用于浮点除法......
如上所述交换行:
from __future__ import division
#cython: wraparound=False
#cython: boundscheck=False
#cython: nonecheck=False
#cython: profile=False
#cython: cdivision=True
将取消所有the Cython global directives,因为它们“必须出现在任何代码之前(但可以出现在其他评论或空白之后)”。