以下
cimport cython
@cython.boundscheck(False)
def boundtest():
cdef int r=4
cdef double l[3]
工作正常。但是当我尝试这个时:
cimport cython
@cython.boundscheck(False)
def boundtest():
cdef int r=4
cdef double l[r]
我收到以下错误:
[1/1] Cythonizing test.pyx
Error compiling Cython file:
------------------------------------------------------------
...
cimport cython
@cython.boundscheck(False)
def boundtest():
cdef int r=4
cdef double l[r]
^
------------------------------------------------------------
test.pyx:13:20: Not allowed in a constant expression
添加装饰器是因为找到了这个相关的 stackexchange 帖子并阅读了 Kurt W. Smith 的 Cython 书。据我所知,这应该可以告诉 Cython 不要担心可能由动态索引变量导致的越界错误,但由于某种原因它没有。我还尝试在编译器选项和全局范围内更改边界检查,但无济于事。
如果不是因为 Cython 文档声称是最新的,我会认为 boundscheck 已经贬值了。