如何将python函数传递给接受函数作为参数的cython函数?

时间:2018-12-05 21:50:09

标签: python cython

我根据一些评论(我意识到发布该问题并不像以前那样精确)来改写我的原始question,希望找到答案。

strong>

我有以下 cdef 函数,除其他各种参数外,该函数还接受定义为 ftype f()函数,如下所示,< / p>

%%cython
ctypedef double (*ftype) (double)

cdef cy_myfunc(int a,..., double x, ftype f):
  ...
  cdef double result
  result = f(x)
  return result

并且我定义了这样的python函数:

def py_myfunc(a,..., x, f):
    return cy_myfunc(a,...,x,f)

我希望能够调用 py_myfunc()并将用户python函数作为f参数传递(python函数的唯一前提条件是应接受double并返回double)。这可能吗?如果可以的话,如何在cython中实现? f()函数在循环中重复使用,因此我希望它尽快。

1 个答案:

答案 0 :(得分:0)

我有一段时间没有修理赛昂了。但是从概念上讲,您的方法是有缺陷的。通过对只能是简单指针值的C类型函数进行硬编码,您会受到太多限制。 python函数决不能那样。它将始终由Py_Object表示为任何可调用对象。

只是不要将f声明为ftype,而是将其声明为普通的python对象(或根本没有类型),然后对其进行调用。无论如何,您都需要传递的Py_Object *的完整语义,因为cython无法保证传递的函数不是完全不同的可调用对象。