这是this question的后续行动。
(为什么/何时)是否最好使用Py_ssize_t
进行索引?在我刚刚找到的docs
# Purists could use "Py_ssize_t" which is the proper Python type for # array indices.
- >这是否意味着总是在索引NumPy / Cython时 - 数组/ - 视图应该使用Py_ssize_t
?
- >是Py_ssize_t
e。 G。一个unsigned int
,因此我无法使用@cython.boundscheck(False)
答案 0 :(得分:24)
Py_ssize_t
已签名。请参阅PEP 353,其中显示“引入了一种新类型Py_ssize_t,它与编译器的size_t类型具有相同的大小,但是已签名。它将是ssize_t的typedef,如果可用的话。”
您应该使用Py_ssize_t
进行索引。我没有在Cython文档中找到明确的声明,但是Cython开发人员Stefan Behnel在电子邮件(https://groups.google.com/forum/#!topic/cython-users/brENF_M9zxM)中说了很多:
作为一般性评论,您使用整数作为索引。你应该 使用Py_ssize_t类型(或size_t,如果你喜欢的话 无符号类型)以适应64位架构。
答案 1 :(得分:18)
Py_ssize_t
是在CPython实现中内部使用的typedef(Python的C实现 - 我不在那里谈论Cython,我在谈论CPython)。它被用于Python C API函数接受或返回可用于索引Python序列的C级整数。这就是为什么它是用于索引的“正确”类型。
Py_ssize_t
反过来解析平台C的无符号size_t
类型的签名变体的平台拼写。所以它是一些有符号整数类型,但它的宽度(位数)取决于你正在使用的平台。