【发布时间】:2020-11-18 11:38:37
【问题描述】:
我想检查内存视图是否用 None 初始化。 我有这样的功能:
cdef void test(int[:] a):
if a == NULL:
print("invalid data")
cdef int[:] memview = None
test(memview)
编译时出现此错误:
Invalid types for '==' (int[:], void *)
将 None 分配给内存视图是否存在问题?如果不是这种情况,我该怎么做才能检测 NULL 值?
谢谢!
【问题讨论】:
-
None是一个 Python 对象,NULL是一个空的 C 指针。它们不是一回事 -
这不是重点。主要问题是 memmoryview 和 null 没有可比性。我们如何检查 memmoryview 是否为空?
-
我想你错过了我试图暗示的点:内存视图永远不是
NULL。可能是None。 -
啊,我明白了。谢谢!我在 nogil 函数中使用它,这就是为什么我认为它不能是 python 对象。没有蟒蛇的东西吗?如果是这样,为什么我可以将它与 nogil 范围内的 memoryview 进行比较?
-
我实际上有点惊讶它在
nogil块中工作。但是,与None相比,不需要任何引用计数,最终会在 C 中作为简单的指针比较,所以我认为没有 GIL 应该是可能的。
标签: null cython memoryview typed-memory-views