可以通過Python腳本將一個cdef
Cython函數傳遞給另一個(python def
)cython函數嗎?通過python接口傳遞cython函數
小例子:
test_module.pyx
cpdef min_arg(f, int N):
cdef double x = 100000.
cdef int best_i = -1
for i in range(N):
if f(i) < x:
x = f(i)
best_i = i
return best_i
def py_f(x):
return (x-5)**2
cdef public api double cy_f(double x):
return (x-5)**2
test.py
import pyximport; pyximport.install()
import testmodule
testmodule.min_arg(testmodule.py_f, 100)
這工作不錯,但我希望能夠也做
testmodule.min_arg(testmodule.cy_f, 100)
從一個test.py,具有cython的速度(每個f(i)
調用沒有Python開銷)。但顯然,Python不知道cy_f,因爲它不是def
或cpdef
宣佈。
我希望這樣的事情存在:
from scipy import LowLevelCallable
cy_f = LowLevelCallable.from_cython(testmodule, 'cy_f')
testmodule.min_arg(cy_f, 100)
但是這給TypeError: 'LowLevelCallable' object is not callable
。
預先感謝您。