【发布时间】:2012-07-26 21:09:23
【问题描述】:
我有以下问题。 我们必须将回调函数传递给 C 代码。如果函数是同一个模块中的Cython函数,情况就很简单了
在 Cython 中:
def callme(int x):
c_callme(x, <int (*)(int)>&callbackme)
cdef int callbackme(int x):
print <int> x
return <int>x
在 C 中:
int c_callme(int x, int (*f)(int))
{
printf("---%d\n",x);
printf("--%d\n",f(x));
return x;
}
问题如下:我们想以最 Pythonic 的方式概括这段代码,以便它也可以接受 Python 函数作为回调参数(当然,需要一些额外的层),以及来自另一个的 C/Cython 函数模块。我想,对于来自单独模块的 C/Cython 函数,必须获取这些函数的地址(转换为 long int?),对于 Python 函数,需要某个包装器
【问题讨论】:
-
请阅读关于代码格式化的常见问题...
-
如果你想同时包装不同的函数(所以一个全局变量是不够的),没有办法绕过运行时生成的代码。见stackoverflow.com/a/51054667/5769463
标签: python c function callback cython