在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)类作为参数并返回它的函数。我知道它可以在不指定类型的情况下工作,但是我想知道我是否可以像对int a
所做的一样(在参数中指定类型)
有什么办法吗?还是如this question中所述,Cython不支持课程?
答案 0 :(得分:0)
它们被称为“扩展类型”,因此您可以很幸运地找到有关此文件的文档。严格来说,几乎所有的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
答案 1 :(得分:-1)
Cython支持class,可以使用cdef来完成。
引用O'Reilly,
“ cdef
类语句告诉Cython创建扩展类型而不是常规类型
Python类。
尽管有出现,但类正文中的cdef
类型声明不是,
类级别的属性。它们是C级实例属性。这种类型的属性声明类似于C ++和Java之类的语言。
对于扩展类型,必须以这种方式在类级别用cdef
声明所有实例属性。”
cdef class Particle:
"""Simple Particle extension type."""
cdef double mass, position, velocity
因此,Cython支持class,CPython也支持。