繁体   English   中英

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

[英]How to pass a python function to a cython function that accepts a function as a parameter?

我正在根据一些评论重新表述我的原始问题(我意识到发布时问题并不像它本来的那么精确),希望能找到答案。

我有以下cdef函数,它在各种其他参数中接受定义为ftypef()函数,如下所示,

%%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 函数的唯一先决条件是应该接受双精度值并返回双精度值)。 这可能吗? 如果是这样,这如何在 cython 中实现? f()函数在循环中重复使用,所以我希望它尽可能快。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM