在Cython中,我们可以在参数中添加类型声明。
cdef int add(int a, int b):
return a + b
但是,the official document没有解释如何声明类对象。我想做这样的事情:
cdef MY_CLASS edit_class(MY_CLASS myclassobj):
myclassobj.edit()
return myclassobj
更具体地说,我想创建一个以(纯Python) class为参数并返回它的函数。我知道它不需要指定类型就可以工作,但我想知道我是否可以像对int a
所做的那样(在参数中指定类型)
有什么办法可以做到吗?或者正如this question中所说的,Cython不支持类?
发布于 2018-09-19 19:44:06
它们被称为“扩展类型”,所以你会有更好的机会去寻找相关的文档。严格地说,几乎任何python都可以用cython编译。因此,类在这种意义上肯定是“受支持的”。但是,如果您想利用类型声明,则需要使用cdef。有几种方法可以做到这一点。我创建了如下所示的cython类,通常会看到很好的加速效果:
cdef class MyClass:
# first initialise 'instance' variables
cdef public str string_1
cdef public int some_number
def __cinit__(self, a_string, a_number):
self.string_1 = a_string
self.some_number = a_number
发布于 2018-09-19 19:42:03
Cython确实支持class,并且可以使用cdef来实现。
提到了O‘’Reilly
“Python语句告诉cdef
生成一个扩展类型,而不是常规的Python类。
尽管表面上看起来,类主体中的cdef
类型声明并不是类级别属性。它们是C级实例属性;这种属性声明风格类似于C++和Java等语言。
对于扩展类型,必须以这种方式在类级别使用cdef
声明所有实例属性。“
cdef class Particle:
"""Simple Particle extension type."""
cdef double mass, position, velocity
所以,Cython支持类,CPython也支持类。
https://stackoverflow.com/questions/52404921
复制相似问题