[英]How to call a cython cdef() function that contains as a parameter a function in python?
[英]How to pass a python function to a cython function that accepts a function as a parameter?
我正在根据一些评论重新表述我的原始问题(我意识到发布时问题并不像它本来的那么精确),希望能找到答案。
我有以下cdef函数,它在各种其他参数中接受定义为ftype的f()函数,如下所示,
%%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.