Cython for 循环转换

Cython for loop conversion

使用cython -a,我发现一个for i in range(0, a, b)语句是运行作为一个python循环(cython -a [=27=中非常黄的线] 输出)。 iabcdef 编辑为 int64_t

然后我尝试了 'old' 语法 for i from 0 <= i < b by a。从 cython -a 的输出来看,它似乎按预期编译得非常好。

此处未优化 range(0, a, b) 是预期的行为,还是这与实现有关?

Automatic range conversion 仅在 cython 可以在编译时确定步骤的符号时应用。由于本例中的步骤是有符号类型,因此它不能返回到 python 循环。

请注意,目前即使类型是无符号的 cython 仍然会退回到 python 循环,这是一个(相当古老的)杰出的进一步优化,编译器可以做但没有做。查看这张票以获取更多信息:

http://trac.cython.org/ticket/546