在Cython中,是否可以将Cython cdef类对象实例作为参数传递给cdef方法。例如,如果我们有以下类:
# foo.pyx
cdef class Foo:
def __cinit__(self, double arg):
self.arg = arg
def get_arg_sqr(self):
return self.arg * 2
# bar.pyx
from foo cimport Foo
cdef exec_foo(Foo foo):
cdef double sqr = foo.get_arg_sqr()
你是如何实现这样的?
# test.py
from foo import Foo
import bar
Foo f = Foo(2.33)
exec_foo(f)
答案 0 :(得分:0)
exec_foo
应该是def
而不是cdef
。在笔记本中,以下似乎工作(没有pyd / pyx文件)
在我的开场小区中
import cython
%load_ext Cython
在下一个单元格中:
%%cython
cdef class Foo:
cdef double arg
def __cinit__(self, double arg):
self.arg = arg
def get_arg_sqr(self):
return self.arg * 2
def exec_foo(Foo foo):
cdef double sqr = foo.get_arg_sqr()
return sqr
在最后一个单元格中。
f = Foo(1.0)
exec_foo(f)