cython - Cython 不能声明 None 类型
问题描述
我有一个 .pyx 文件如下:
cdef class Foo:
def __cinit__(self, bar=None):
self.bar = bar
和一个 .pxd 如下:
cdef class Foo:
cdef public ??? bar
而不是???
我想将类型声明为int
或者None
我尝试使用带有 void 或 int 的 fusedtype,这也不起作用。
有谁知道如何使它编译?使用None
或Null
?
解决方案
Python 类型的主要目的是定义有效的 C 表示(在使用的空间或速度方面)。int
Python 将其理解为 C 整数,并且没有 C 数据类型可以是 C 整数或 PythonNone
对象。
然后你有两个选择:
bar
创建一个 Python 对象 ( ) 并在cdef public object bar
构造函数中添加一些运行时类型检查,以确保它是整数或None
. 您可能还想@property
在写入时使用 to 来检查它。由于这使用 Python 对象,因此您不应期望任何 Cython 加速。制作
bar
一个int
(即一个 C 整数)并选择一些表示无效值的特殊值(因此您需要选择一个您永远不需要表示的值)。这在空间和可能的速度方面将是有效的。
推荐阅读
- reactjs - reactjs中如何使用quilljs-markdown
- javascript - 为什么在单元测试时无法读取实例?
- python - 尝试用几种方法并行化 osmnx.get_nearest_node(..) 函数。多处理,joblib,但没有一个工作
- java - 正则表达式验证数字管道
- python - Pandas 条形图中 x 轴上的月份排序
- svg - 在编辑“.svg”图像时,Inkscape 非常非常滞后。谁能告诉我应该怎么做才能让 Inkscape 运行得更快?
- mongodb - 删除空 MongoDB 聚合
- c++ - Emscripten 在 macOS 上编译 C++:错误“无线程 API”
- intellij-idea - 菜鸟弄清楚 instal4j 和 intellij
- python - 文件 ”
",第 1 行,在