Cython无法声明None类型

时间:2019-01-09 19:31:51

标签: cython

我有一个.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的融合类型,这也不起作用。

有人知道如何进行编译吗?使用NoneNone

1 个答案:

答案 0 :(得分:1)

Python类型的主要目的是定义有效的C表示形式(在使用的空间或速度上)。 Python将int理解为C整数,没有C数据类型可以是C整数或Python None对象。

然后您有两个选择:

  1. 使bar为Python对象(cdef public object bar),并在构造函数中添加一些运行时类型检查,以确保它是整数或None。您可能希望在写入时也使用@property进行检查。由于它使用Python对象,因此您不应期望任何Cython加速。

  2. 使barint(即C整数),并选择一些表示无效值的特殊值(因此,您需要选择不需要的值)代表)。就空间和可能的速度而言,这将是有效的。