我有一个.pyx文件,如下所示:
$pos = strpos($str, '/target-');
if ($pos !== false) {
var_dump($pos);
}
和.pxd如下:
cdef class Foo:
def __cinit__(self, bar=None):
self.bar = bar
我要声明类型为cdef class Foo:
cdef public ??? bar
或???
int
我尝试使用具有void或int的融合类型,这也不起作用。
有人知道如何进行编译吗?使用None
或None
?
答案 0 :(得分:1)
Python类型的主要目的是定义有效的C表示形式(在使用的空间或速度上)。 Python将int
理解为C整数,没有C数据类型可以是C整数或Python None
对象。
然后您有两个选择:
使bar
为Python对象(cdef public object bar
),并在构造函数中添加一些运行时类型检查,以确保它是整数或None
。您可能希望在写入时也使用@property
进行检查。由于它使用Python对象,因此您不应期望任何Cython加速。
使bar
为int
(即C整数),并选择一些表示无效值的特殊值(因此,您需要选择不需要的值)代表)。就空间和可能的速度而言,这将是有效的。