如何在不使用列表的情况下在Cython中定义扩展类型的对象数组?

时间:2019-12-03 03:29:57

标签: python cython

Bar与0..6 Foo s相关联。 Foo是扩展类型,就像这样

cdef class Foo:
    cdef double fooiness

    cdef void do_things(self):
        self.fooiness += 1

我非常非常非常非常频繁地复制Bar的副本。理想情况下,我甚至希望能够在没有GIL的情况下与线程同时复制Bar的副本。我可以这样定义Bar

cdef class Bar:
    cdef list my_foos

    cdef Bar copy(self):
        cdef Bar the_copy = Bar.__new__(Bar)
        the_copy.my_foos[:] = self.my_foos[:]
        return the_copy

但是您可以想象,list[:] = list[:]报告中的-a位显示为亮黄色。

我尝试过cdef Foo my_foos[6],但这给了我Array element cannot be a Python object

所以我尝试了cdef Foo * my_foos[6],但这给了我Pointer base type cannot be a Python object

我已经考虑完全放弃该数组并使用cdef Foo my_foo_1, my_foo_2...,但我想遍历我的Foo,而不必手动展开循环。

搜索“我如何在Cython中创建扩展类型数组”的变体没有任何意义-这似乎很奇怪,因为拥有不是原始类型的东西的数组是很多人会想到的事情想做。我可能缺少明显的东西。

我如何进行这项工作?

0 个答案:

没有答案