将cdef类对象作为参数传递给cdef方法

时间:2015-07-16 20:56:43

标签: python cython

在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)

1 个答案:

答案 0 :(得分:0)

如果你想在你的cython代码之外访问它,那么

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)