gpt4 book ai didi

python - Cython 头指令和 __future__

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:55 26 4
gpt4 key购买 nike

使用 Cython header 指令和使用 future 导入的正确方法是什么? 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

这确保除法按预期工作(使用 future 版本),但我不确定是否遵守了指令。将第 1 行与第 4 行交换会导致除法恢复为标准 Python 2.x 方法。

最佳答案

@user2357112 #cython: cdivision=Truefrom __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 时将 float 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 ,因为它们“必须出现在任何代码之前(但可以出现在其他注释或空格之后)”。

关于python - Cython 头指令和 __future__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21356158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com